반응형

사전 작업

설명

  • master, slave 노드 모두 아래 작업들이 공통적으로 수행되어야함

hostname 변경하기

  • master, slave 노드의 호스트명을 변경해야함(호스트명이 노드 이름이 된다)
  • 변경하지 않으면 kubectl get nodes 명령어 수행시 노드 이름이 겹치게 되므로 하나의 노드인 것 처럼 노출됨
  • master는 kube-master, slave는 kube-slave-1, kube-slave-2로 변경
  • 참고

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
    

참고

반응형

'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

+ Recent posts