K8s(kubernetes) 설치

2022. 5. 17. 19:35kubernetes

설치 방식

- Kubeadm

- Kubespray(Kubeadm + Ansible)

Kubeadm (for ubuntu, 1대에서)

- kubeadm, kubectl, kubelet 도구 설치

 apt 패키지 업데이트

sudo apt-get update

쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치

sudo apt-get install -y apt-transport-https ca-certificates curl

 구글 클라우드의 공개 사이닝 gpg키 다운

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg 
https://packages.cloud.google.com/apt/doc/apt-key.gpg

 쿠버네티스 리포지터리를 apt리포지터리에 추가

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

 apt 패키지 업데이트 후 kubelet, kubeadm, kubectl을 설치 후 해당 버전을 hold(업데이트 잠금)로 고정시킨다. 

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

> 해당버전을 설치하려면 각각 "kubeadm=1.22.8-00" 같이 버전명을 붙인다.

 

Cgroup driver 오류

 docker info | grep 'Cgroup Driver' 명령어 실행시 아래와 같이 나올 경우

docker info | grep 'Cgroup Driver'
 
 Cgroup Driver: cgroupfs

/etc/docker/daemon.json 파일을 구성해준다.

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

도커 재시작

sudo systemctl restart docker

정상적으로 실행 되면 아래와 같은 값이 나온다. 

docker info | grep 'Cgroup Driver'

 Cgroup Driver: systemd

데몬 리로드, kubelet 재실행

sudo systemctl daemon-reload && sudo systemctl restart kubelet

K8s 클러스터 생성

sudo kubeadm init --control-plane-endpoint 192.168.100.100 
--pod-network-cidr 172.16.0.0/16 --apiserver-advertise-address 192.168.100.100

위에 kubeadm init 실패 시 아래에 명령어 실행 후 다시 위 명령어 실행

sudo kubeadm reset

kubectl을 root가 아닌 사용자가 쓸 수 있게 구성

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

클러스터 생성이 정상적으로 완료된 경우 아래에 명령어 실행 후 결과 

kubectl get nodes

NAME     STATUS     ROLES                  AGE   VERSION
docker   **NotReady**   control-plane,master   14m   v1.22.8

Add-on

Calico Network (kubernetes에서 주로 쓰는 네트워크 인터페이스)

 

kubectl create -f 
https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
curl https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O

다운 받아진 custom-resources.yaml 파일에 주소를 자신의 네트워크 주소로 수정

...
      cidr: 172.16.0.0/16
...

수정한 파일로 Calico Network리소스 생성

kubectl create -f custom-resources.yaml

클러스터 상태 확인

kubectl get pods -A 명령어 실행시 아래와 같은 결과 출력

kubectl get pods -A   

NAMESPACE          NAME                                       ...
calico-apiserver   calico-apiserver-c9565f67b-2p29k           ...
calico-apiserver   calico-apiserver-c9565f67b-slthl           ...
calico-system      calico-kube-controllers-5d74cd74bc-sg7dn   ...
calico-system      calico-node-tgxks                          ...
calico-system      calico-typha-7447fdc844-txrdb              ...
kube-system        coredns-78fcd69978-4ztkq                   ...
kube-system        coredns-78fcd69978-jpwxx                   ...
kube-system        etcd-docker                                ...
kube-system        kube-apiserver-docker                      ...
kube-system        kube-controller-manager-docker             ...
kube-system        kube-proxy-5st98                           ...
kube-system        kube-scheduler-docker                      ...
tigera-operator    tigera-operator-7cf4df8fc7-kx87z           ...
```

kubectl get nodes 명령어 실행시 아래와 같은 결과 출력

kubectl get nodes

NAME     STATUS   ROLES                  AGE   VERSION
docker   **Ready**    control-plane,master   30m   v1.22.8

1대의 시스템으로 구성된 컨트롤 플레인 경우 컨테이너를 실행하지 못하게 격리 되있기 때문에 풀어주는 명령어 실행

kubectl taint node docker node-role.kubernetes.io/master-

 

'kubernetes' 카테고리의 다른 글

Label과 LabelSelector, Annotations  (0) 2022.05.29
Namespace  (0) 2022.05.29
Workload - Pod  (0) 2022.05.29
Kubernetes Objects  (0) 2022.05.19
Kubespray로 Kubernetes 설치  (0) 2022.05.17