Skip to content

Instantly share code, notes, and snippets.

@mosfet1kg
Last active July 23, 2020 08:14
Show Gist options
  • Save mosfet1kg/f0b9d277f83754c50df5a8c317652ac0 to your computer and use it in GitHub Desktop.
Save mosfet1kg/f0b9d277f83754c50df5a8c317652ac0 to your computer and use it in GitHub Desktop.
---
marp: true
#theme: uncover
paginate: true
footer: '![](./image/nbp.png)'
---
<!-- _paginate: false -->
<!-- _theme: uncover -->
# <!--fit--> 개발환경 세팅
## kubernetes 기반
2020.07.23
---
# 커널 업그레이드
kubelet 은 docker-shim을 이용하여 containerd를 제어함.
3.10 커널에서는 docker-shim에 memory leak이 발생하여 커널 업그레이드를 진행.
https://support.d2iq.com/s/article/Critical-Issue-KMEM-MSPH-2018-0006
## 커널 버전 확인
```bash
[irteamsu@dev-k8s-test001-ncl ~]$ uname -r
3.10.0-693.2.2.el7.x86_64
```
---
# 커널 업그레이드(cont.)
4.17.9 커널로 업그레이드 진행
(tne와 협의하여 현재 관리망에서 사용되고 있는 vmware 하이퍼바이저와 호환되는 커널버전을 사용해야함)
```bash
wget https://kr.object.ncloudstorage.com/kubernetes/kernel-ml-4.17.9-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-4.17.9-1.el7.elrepo.x86_64.rpm
grub2-mkconfig -o /boot/grub2/grub.cfg
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0
```
진행 완료 후 재부팅 수행
---
# 커널 업그레이드(cont.)
관리망의 경우 리부팅 시 tne 및 운영팀에게 자동으로 알림이 통보됨.
nsight에서 PM(Planned Maintenance) 등록 후 진행하는 것이 필요함.
![width:300px](./img1.png)
---
# Docker 설치
사내 VM들은 의도적으로 파티션 용량 할당을 다르게함.
/ 용량을 작게 할당하고, /home에 상당히 많이 배분.
```bash
[irteamsu@dev-k8s-test001-ncl ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 10G 5.1G 5.0G 51% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 16K 3.9G 1% /dev/shm
tmpfs 3.9G 468K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/xvda3 87G 142M 87G 1% /home
tmpfs 782M 0 782M 0% /run/user/10000
tmpfs 782M 0 782M 0% /run/user/0
tmpfs 782M 0 782M 0% /run/user/11000
```
---
# Docker 설치(cont.)
Docker의 경우 /var/lib/docker 에 컨테이너 이미지들을 저장.
/ 를 사용하므로 용량이 부족해짐.
symbolic link를 통해 /home에 이미지를 저장하도록 변경.
```bash
[irteamsu@dev-k8s-test001-ncl ~]$ sudo mkdir /home1/docker
[irteamsu@dev-k8s-test001-ncl ~]$ sudo ln -s /home1/docker /var/lib/docker
```
---
# Docker 설치(cont.)
아래의 명령어로 호스트에 도커를 설치
```bash
[irteamsu@dev-k8s-test001-ncl ~]$ sudo curl https://get.docker.com | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13857 100 13857 0 0 56049 0 --:--:-- --:--:-- --:--:-- 56101
# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c
+ sudo -E sh -c 'yum install -y -q yum-utils'
[irteamsu@dev-k8s-test001-ncl ~]$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[irteamsu@dev-k8s-test001-ncl ~]$ sudo systemctl start docker
[irteamsu@dev-k8s-test001-ncl ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
---
# ssh key pair 생성
ansible이 구동될 서버에서 ssh key pair를 생성한다. (이 서버에서 k8s의 클러스터에 참여할 모든 노드에 ssh로 ansible playbook에 작성된 task를 수행한다.)
1. key pair 생성
```bash
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home1/irteamsu/.ssh/id_rsa): Created directory '/home1/irteamsu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home1/irteamsu/.ssh/id_rsa.
Your public key has been saved in /home1/irteamsu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zq8hzzPA/KP3YGapQHKxQgZ7TUTMXgyfozP3v7l2tEI irteamsu@dev-k8s-test001-ncl
The key's randomart image is:
+---[RSA 2048]----+
|. ==o |
| o oo.o. |
|. +.o.+ |
| + .+ . |
| o Bo. S |
| = +++ oE . |
| . .oO... . |
| . O*=o.o |
| oo+**= |
+----[SHA256]-----+
```
---
# ssh key pair 생성(cont.)
2. public key 확인
```bash
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAg7rrni3dlYo5YOoeG/8wj5GtGZIjrudI56P irteamsu@dev-k8s-test001-ncl
```
3. k8s가 설치될 모든 노드에 접근하여, public key를 ~/.ssh/authorized_keys에 저장
---
# ansible
- 개발 환경 구축 등의 일련의 작업을 자동화할 수 있는 도구
- python + YAML 기반으로 만들어짐
# kubespray
https://github.com/kubernetes-sigs/kubespray
- kubernetes를 ansible 기반으로 설치할 수 있도록 구성한 playbook
---
# ansible 설치
- ansible과 그 일부 모듈은 python기반.
```bash
$ sudo yum install -y python-pip
```
- kubespray 저장소 clone
```bash
#$ git clone https://github.com/kubernetes-sigs/kubespray.git
$ git clone https://oss.navercorp.com/ncp-container/kubespray-internal
```
- 앞서 받은 pip를 통해, kubespray에 필요한 phyton 모듈을 다운로드
```bash
$ pip install -r requirements.txt
```
---
# kubespray playbook 구성
* inventory
- https://oss.navercorp.com/ncp-container/kubespray-internal/blob/ncloud/inventory/sample/inventory.ini
* cluster.yml
- 클러스터 구성시 사용
- https://oss.navercorp.com/ncp-container/kubespray-internal/blob/ncloud/cluster.yml
* scale.yml
- 노드 확장시 사용
- https://oss.navercorp.com/ncp-container/kubespray-internal/blob/ncloud/scale.yml
---
# ansible 구동
```bash
$ ansible-playbook -i inventory.ini ../../cluster.yml
```
---
# 기타
- NAS 신청
- VIP 신청
* 터널링 인터페이스
* TCPMSS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment