반응형
사전 작업
설명
- master, slave 노드 모두 아래 작업들이 공통적으로 수행되어야함
hostname 변경하기
- master, slave 노드의 호스트명을 변경해야함(호스트명이 노드 이름이 된다)
- 변경하지 않으면 kubectl get nodes 명령어 수행시 노드 이름이 겹치게 되므로 하나의 노드인 것 처럼 노출됨
- master는 kube-master, slave는 kube-slave-1, kube-slave-2로 변경
- 참고
docker 설치
- kubernetes는 docker 기반이므로 사전에 설치되어있어야함
- 참고
kubernetes 설치
# su 권한으로 로그인
sudo su
# kubernetes key 설치
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
# kubernetes 설치를 위해 repository 추가
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# kubernetes 설치
apt-get update && apt-get install -y kubelet kubeadm kubectl kubernetes-cni
docker 실행
sudo systemctl enable docker.service
disable swap
sudo swapoff -a
node private ip 설정
- 각 노드에 접속해 아래 설정 파일 각각 수정
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- 아래 내용 추가
[Service]
...
Environment="KUBELET_EXTRA_ARGS=--node-ip=<현재 접속한 노드의 사설 IP>"
...
- 서비스 재시작
sudo systemctl daemon-reload \
&& sudo systemctl restart kubelet
Kubernetes Cluster 설정
master 노드 설정
- 초기화 명령어 실행 (master의 주소 : 192.168.56.106)
sudo kubeadm init \
--pod-network-cidr=192.168.56.0/16 \
--apiserver-advertise-address=192.168.56.106
- 초기화 완료 후 나타나는 로그 중 아래와 같은 부분을 복사 (kubernetes 클러스터에 slave 노드를 참여시킬 때 필요)
kubeadm join 192.168.56.106:6443 --token lu933p.vjeu7dijh4auptvs --discovery-token-ca-cert-hash sha256:6becf6ff607cda0642f8303fec35fee08edb0849247cd07d48cc24ab477efbaf
- conifig 파일 설정
mkdir -p $HOME/.kube \
&& sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config \
&& sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Pod Network Add-On 설치 (flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
slave 노드 설정
- master 노드 초기화시 복사한 명령어로 클러스터에 참여하는 스크립트 실행
sudo kubeadm join 192.168.56.106:6443 --token lu933p.vjeu7dijh4auptvs --discovery-token-ca-cert-hash sha256:6becf6ff607cda0642f8303fec35fee08edb0849247cd07d48cc24ab477efbaf
Kubernetes Cluster 테스트
설명
- 위 작업들을 통해 Cluster가 올바르게 구축되었는지 테스트
- 아래 수행되는 작업들은 master 노드에서만 수행하면 됨
cluster nodes 상태 확인
- nodes 상태 확인 명령어
kubectl get nodes -o=wide
- 명령어 수행 결과
- INTERNAL-IP가 해당 노드의 IP로 잘 나오는지 확인
- slave의 STATUS가 NotReady인 경우 시간이 좀 지난 후 Ready 상태가 되는 것 확인 가능
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kube-master Ready master 25m v1.16.3 192.168.56.106 <none> Ubuntu 18.04.3 LTS 4.15.0-64-generic docker://18.9.7
kube-slave-1 Ready <none> 24m v1.16.3 192.168.56.107 <none> Ubuntu 18.04.3 LTS 4.15.0-72-generic docker://18.9.7
kube-slave-2 Ready <none> 24m v1.16.3 192.168.56.108 <none> Ubuntu 18.04.3 LTS 4.15.0-64-generic docker://18.9.7
shell-demo 컨테이너로 테스트
- 컨테이너 배포
kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml
- 배포 확인
kubectl get pod shell-demo
- 동작 테스트
kubectl exec shell-demo ls /
- 컨테이너 삭제
kubectl delete -f https://k8s.io/examples/application/shell-demo.yaml
기타
cluster 재시작하기
- master, slave 모두 아래 초기화 명령어 실행 후 docker 실행 과정부터 다시 시작
sudo kubeadm reset \
&& sudo rm -rf $HOME/.kube \
&& sudo ifconfig cni0 down \
&& sudo ifconfig flannel.1 down \
&& sudo ip link delete cni0 \
&& sudo ip link delete flannel.1 \
&& sudo rm -rf /etc/cni
이슈
- kubeadm init 명령어 실행시 "docker service is not enabled, please run ‘systemctl enable docker.service’" 오류 발생
sudo systemctl enable docker.service
- kubeadm init 명령어 실행시 "running with swap on is not supported. Please disable swap" 오류 발생
sudo swapoff -a
- kubectl exec 명령어 실행시 "error: unable to upgrade connection: pod does not exist" 오류 발생
- 각 노드에 접속해 아래 설정 파일 각각 수정
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- 아래 내용 추가
[Service] ... Environment="KUBELET_EXTRA_ARGS=--node-ip=<현재 접속한 노드의 사설 IP>" ...
- 서비스 재시작
systemctl daemon-reload systemctl restart kubelet
참고
- 설치
- https://snowdeer.github.io/kubernetes/2018/02/10/how-to-install-kubenetes/
- https://snowdeer.github.io/kubernetes/2018/02/11/kubernetes-make-master-and-join/
- https://hiseon.me/linux/ubuntu/ubuntu-kubernetes-install/
- http://blog.kichul.co.kr/2018/01/11/virtualbox%EC%97%90%EC%84%9C-kubernetes-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/
- https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/
- https://kycfeel.github.io/2018/10/14/스스로-Kubernetes-클러스터-구축하기/
- 이슈
반응형
'Development > Kubernetes' 카테고리의 다른 글
[Kubernetes] Service (0) | 2020.12.29 |
---|---|
[Kubernetes] 예제 (0) | 2020.12.29 |
[Kubernetes] 명령어 (0) | 2020.12.29 |
[Kubernetes] Minikube 설치 (0) | 2020.12.29 |
[Kubernetes] 단일 클러스터 구성하기 (0) | 2020.12.29 |