Serviceaccount는 kubectl get serviceaccount 명령어로 확인이 가능하지만, 권한이 없어 대시보드에 접근해도 아무것도 볼 수 없는 상태다. 그러므로 권한을 가지고 있는 어카운트를 만들어 보도록 하자. 대시보드 네임스페이스에 admin-user 어카운트를 만들어 준다.
kubelet이 제대로 작동하게 하려면 반드시 swap을 사용하지 않도록 설정해야 한다. swap은 메모리 내부 공간이 부족할 경우 하드 디스크의 공간을 메모리 역할로 활용하는 기술이다. 1.21 버전까지는 swap 메모리 사용을 지원하지 않았으나, 1.22 버전에서 swap memory를 사용할 수 있도록 지원이 추가되었으나, 아직 정식 출시되지 않았기 때문에 꺼 주기로 하자. 관련 문서
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
3. iPtable 트래픽 설정
리눅스 커널의 iptables가 브리지된 트래픽을 볼 수 있도록 커널을 수정해 준다. iptables와 netfilter의 작동 원리를 알면 좋다.
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
lsmod | grep br_netfilter 명령어를 통해 br_netfilter 모듈이 로드되었는지 확인할 수 있다. 로드되지 않았다면 modprobe br_netfilter 명령어를 쳐 보자.
그냥 설치하게 되면 도커에서 사용하는 cgroup manager과 쿠버네티스에서 사용하는 게 다르기 때문에 충돌이 생긴다. 도커는 기본적으로 cgroupfs를 사용하고, 쿠버네티스는 systemd를 사용한다. docker의 config 파일을 수정해서 해결하는 방법과, k8s의 yaml을 파일로 우회하는 방법이 있다. 여기에서는 docker의 config 파일을 수정해 주겠다. 관련 문서
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a Pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
특히 마지막 줄은 worker node에서 클러스터에 join할 수 있는 token값이 포함된 명령어인데, 이를 파일로 저장해 두면 좋다. 해당 토큰은 24시간 동안 유효하며, 노드 중설 시에는 토큰을 새로 생성해야 한다.
# ex) guru 계정에서 kubectl 명령어 사용 권한을 줄 때
mkdir -p ~guru/.kube
sudo scp master:/etc/kubernetes/admin.conf ~guru/.kube/config
sudo chown guru:guru ~guru/.kube/config
3. 마스터 노드에서 CNI 설치
CNI(Container Network Interface)는 Pod가 생성, 삭제될 때 호출되는 API의 규격과 인터페이스 등을 정의한다. 호스트에 VxLAN 생성 Overlay Network 구성, 호스트마다 IP, Subnet을 할당해 주고 Pod ID 부여해 주는 등 많은 역할을 한다.
CNI에는 플라넷, 위브넷, 칼리코 등이 있는데 각 환경에 맞는 CNI를 선택하여 사용하면 된다.
참고) centos8에서 Trident를 설치 시 CNI를 calico로 설치하면 오류난다. weave net으로 설치했을 시 정상 작동하였다.
설치가 완료되었다면 다음 명령어로 클러스터 구성이 제대로 되었는지 확인 가능하다. Ready 상태면 정상적으로 클러스터 구성도 완료된 것이다.
[root@master /]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 125m v1.22.5
worker1 Ready <none> 117m v1.22.5
worker2 Ready <none> 117m v1.22.5
worker3 Ready <none> 117m v1.22.5
[root@master /]# kubectl cluster-info
Kubernetes control plane is running at https://10.100.31.110:6443
CoreDNS is running at https://10.100.31.110:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Shell 자동 완성 활성화
명령어를 칠 때 tap 키를 통해 자동 완성을 하기 위해서는 패키지를 설치해야 한다. 관련 문서