쿠버네티스 구성
Usecase
Case 1
- 집에 안 쓰는 노트북에 CentOS를 깔고 KVM을 설치
Case 2
- 현재 쓰는 노트북에 VirtualBox로 VM 3개
Case 3
- 구글클라우드를 이용해서 사용
Case 2로 ㄱㄱ
Case 2 구성
- Host OS: Windows
- 메모리 12G, CPU 4 Core, Disk 500GB로 가정
- Guest OS는 4G, 2 Core, 150GB 구성
- Guest에 설정 좀 하고 Kubernetes, Docker를 설치
- 위 Guest OS를 2개 복사 --> 총 3개의 node, 12G, 6 Core, 450GB
- 마지막으로 필수 네트워킹 관련 내용과 대시보드 설치
1. Virtualbox, CentOS, MobaXterm 설치
Virtualbox
CentOS --> Minimal로 다운
MobaXterm --> Installer editon로 다운
MobaXterm 설정
- Sessions > SSH > Remote host : 192.168.35.30 > [Bookmark settings] Session name : master-192.168.35.30 > [ok]
- Sessions > SSH > Remote host : 192.168.35.31 > [Bookmark settings] Session name : node1-192.168.35.31 > [ok]
- Sessions > SSH > Remote host : 192.168.35.32 > [Bookmark settings] Session name : node2-192.168.35.32 > [ok]
192.168.0.30으로 설정한 흑우 없제?
- 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라
2. VM 설정 및 CentOS 설치
1. [VM 생성 1단계] 머신 > 새로 만들기 클릭
2. [VM 생성 1단계] 이름 : k8s-master, 종류: Linux, 버전: Other Linux(64-bit)
3. [VM 생성 2단계] 메모리 : 4096 MB
4. [VM 생성 3단계] 하드디스크 : 지금 새 가상 하드 디스크 만들기 (VDI:VirtualBox 디크스 이미지, 동적할당, 150GB)
5. [VM 생성 후 시스템 설정] 프로세서 개수 : CPU 2개
6. [VM 생성 후 저장소 설정] 컨트롤러:IDE 하위에 있는 광학드라이브 클릭 > CentOS 이미지 선택 후 확인
7. [VM 생성 후 네트워크 설정] VM 선택 후 설정 버튼 클릭 > 네트워크 > 어댑터 1 탭 > 다음에 연결됨 [어댑터에 브리지] 선택
- IP를 할당 받을 수 없는 경우 [NAT 네트워크]
8. 시작
VM 시작 시 에러(E_FAIL (0x80004005) 해결 방법
FASOO DRM 삭제
정상 부팅
CentOS 설치
1. Test this media & install CentOS 7
2. Language : 한국어
3. Disk 설정 [시스템 > 설치 대상]
- [기타 저장소 옵션 > 파티션 설정] 파티션을 설정합니다. [체크] 후 [완료]
- 새로운 CentOS 설치 > 여기를 클릭하여 자동으로 생성합니다. [클릭]
- /home [클릭] 후 용량 5.12 GiB로 변경 [설정 업데이트 클릭]
- / [클릭] 후 140 GiB 변경 후 [설정 업데이트 클릭]
- [완료], [변경 사항 적용]
4. 네트워크 설정 [시스템 > 네트워크 및 호스트명 설정]
- 호스트 이름: k8s-master [적용]
- 이더넷 [설정]
[일반] 탭
- 사용 가능하면 자동으로 이 네트워크에 연결 [체크]
[IPv4 설정] 탭
- 방식: 수동으로 선택,
- [Add] -> 주소: 192.168.35.30, 넷마스크 : 255.255.255.0, 게이트웨이: 192.168.35.1, DNS 서버 : 8.8.8.8
- [저장][완료]
5. 설치시작
6. [설정 > 사용자 설정] ROOT 암호 설정
7. 설치 완료 후 [재부팅]
32비트로 설정해논 흑우는 이 화면에서 안 넘어감 ㅋㅋ
네트워크 IPv4 설정
192.168.0.30으로 설정한 흑우 없제?
- 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라
부팅 완료
편하게 사용하기 위해 VirtualBox는 실행만 하고 MobaXTerm으로 접속
3. Pre-Setting
SELinux 설정, 방화벽 해제, Swap 비활성화 쭉쭉 복붙 ㄱㄱ
SELinux permissive로 변경
setenforce 0
위 설정 영구적으로 설정
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Current mode:permissive인지 확인
sestatus
firewalld 비활성화
systemctl stop firewalld && systemctl disable firewalld
NetworkManager 비활성화
systemctl stop NetworkManager && systemctl disable NetworkManager
Swap 비활성화
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
iptables 커널 옵션 활성화
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
쿠버네티스 YUM Repository 설정
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
Centos Update
yum update -y
Hosts 등록
cat << EOF >> /etc/hosts
192.168.35.30 k8s-master
192.168.35.31 k8s-node1
192.168.35.32 k8s-node2
EOF
192.168.0.30으로 설정한 흑우 없제?
- 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라
Docker & Kubernets 설치
도커 설치 전 필요 패키지 설치
yum install -y yum-utils device-mapper-persistent-data lvm2
도커 설치를 위한 저장소 설정
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
도커 패키지 설치
yum update -y && yum install -y docker-ce-18.06.2.ce
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
Kubernetes 설치 (1.15를 설치해부렀네...)
yum install -y --disableexcludes=kubernetes kubeadm-1.15.5-0.x86_64 kubectl-1.15.5-0.x86_64 kubelet-1.15.5-0.x86_64
4. Clone VM
Master shutdown
shutdown now
VM 복사, Master 선택 후 마우스 우클릭
1. 이름 : k8s-node1, MAC 주소정책 : 모든 네트워크 어댑터의 새 MAC 주소 생성
2. 복제방식 : 완전한 복제
Config Node
Network 변경하기
- node1, node2 똑같이 반복(ip는 바꿔서)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
...
DEVICE="etho0"
ONBOOT="yes"
IPADDR="192.168.35.31"
...
hostnamectl set-hostname k8s-node1
5. Initialize Master and Join Node
Master 설정
도커 및 쿠버네티스 실행
systemctl daemon-reload
systemctl enable --now docker
도커 설치 확인
[root@k8s-master ~]# docker run hello-world
Unable to find image 'ello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
[https://hub.docker.com/](https://hub.docker.com/)
For more examples and ideas, visit:
[https://docs.docker.com/get-started/](https://docs.docker.com/get-started/)
- Hello from Docker!가 보이면 됨
쿠버네티스 실행
systemctl enable --now kubelet
쿠버네티스 초기화 명령 실행
Pod의 IP가 자동으로 생성될 때 사용하는 대역 설정
kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address=192.168.35.30
- 20.96.0.0/12 대역으로 설정한 것
Default: 10.96.0.0/12
아래 내용 기억
kubeadm join 192.168.35.30:6443 --token 4cbjc8.90bimhz2as526eob
\--discovery-token-ca-cert-hash sha256:8e50db8c01c936718797880b3acd3619e07dc0188d8def5cd4a2e7b443f7bc95
환경변수 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubectl 자동완성 기능 설치
yum install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
- 와 이거 하면 kubectl 사용 시 tab 버튼으로 다음에 올 명령어 조회가 가능하대!
Node1, 2 설정
도커 및 쿠버네티스 실행
도커 실행
systemctl daemon-reload
systemctl enable --now docker
쿠버네티스 실행
systemctl enable --now kubelet
Node 연결
kubeadm join 192.168.35.30:6443 --token 4cbjc8.90bimhz2as526eob
\--discovery-token-ca-cert-hash sha256:8e50db8c01c936718797880b3acd3619e07dc0188d8def5cd4a2e7b443f7bc95
- 아래 내용 기억 이라는 제목에 있는 그 내용임
Master에서 Node 연결 확인
kubectl get nodes
6. Add Plugin
Calico 설치
curl -O https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed s/192.168.0.0\\/16/20.96.0.0\\/12/g -i calico.yaml
kubectl apply -f calico.yaml
calico와 coredns관련 Pod의 status가 running인지 확인
[root@k8s-master ~\] kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-75dbcbbf8b-mxj5k 1/1 Running 0 109s
kube-system calico-node-6v29g 1/1 Running 0 109s
kube-system calico-node-76fss 1/1 Running 0 109s
kube-system calico-node-qwj5m 1/1 Running 0 109s
kube-system coredns-5c98db65d4-8bkfz 1/1 Running 0 23m
kube-system coredns-5c98db65d4-mw97g 1/1 Running 0 23m
kube-system etcd-k8s-master 1/1 Running 0 23m
kube-system kube-apiserver-k8s-master 1/1 Running 0 22m
kube-system kube-controller-manager-k8s-master 1/1 Running 0 23m
kube-system kube-proxy-gwf8x 1/1 Running 0 8m34s
kube-system kube-proxy-kt8kh 1/1 Running 0 23m
kube-system kube-proxy-ncfqh 1/1 Running 0 8m38s
kube-system kube-scheduler-k8s-master 1/1 Running 0 23m
Dashboard
Dashboard 설치
kubectl apply -f https://kubetm.github.io/documents/appendix/kubetm-dashboard-v1.10.1.yaml
백그라운드로 Proxy 띄우기
이거 말고
nohup kubectl proxy --port=8001 --address=192.168.35.30 --accept-hosts='^\*$' >/dev/null 2>&1 &
이걸로
nohup kubectl proxy --disable-filter=true --port=8001 --address=192.168.35.30 --accept-hosts='^\*$' >/dev/null 2>&1 &
--disable-filter=true
안 하면 나중에 껐다 다시키면 forbidden 에러남
접속 URL
(http://192.168.35.30:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/)
- SKIP
출처
인프런 - 대세는 쿠버네티스 설치 강의
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 6. Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.04 |
---|---|
[k8s] 5. Service - 실습 (0) | 2021.02.03 |
[k8s] 4. Service - ClusterIP, NodePort, LoadBalancer (0) | 2021.02.01 |
[k8s] 3. Pod - 실습 (0) | 2021.01.31 |
[k8s] 1. Pod - Container, Label, NodeSchedule (0) | 2021.01.27 |