
Control Plane
API server
c-m (Controller-manager)
Sched
etcd (etc daemon)
k-proxy (kube-proxy)
DNS (kube-dns)
컨테이너 리소스 모니터링
클러스터-레벨 로깅
Kubeadm = 쿠버네티스를 설치하기 위한 도구
Kubespray(Kubeadm+Ansible) = 실제로 많이 쓰임
설치
Kubeadm 1.22.8
쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
서명 키 복사
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
저장소 추가
$ 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
$ sudo apt-get update # 저장소 추가 했으니 한번 더 실행
설치 버전 확인
$ apt-cache madison kubeadm | grep 1.22.8
kubeadm | 1.22.8-00 | https://apt.kubernetes.io kubernetes-xenial/main amd64 Packages
$ sudo apt-get install kubeadm=1.22.8-00 kubelet=1.22.8-00 kubectl=1.22.8-00 -y
패키지 업데이트시 자동업데이트를 막기위한 hold
$ sudo apt-mark hold kubelet kubeadm kubectl
클러스터 생성
$ kubeadm init --control-plane-endpoint 192.168.100.100 --pod-network-cidr 172.16.0.0/16 --apiserver-advertise-address 192.168.100.100
사용하고 있는 네트워크와 충돌을 방지하기 위해 172.16.0.0/16 사용
Cgroup driver 오류
docker info | grep 'Cgroup Driver'
Cgroup Driver: cgroupfs # 버전이 바뀌면서 cgroupfs 지원 하지 않음
/etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
재실행
sudo systemctl restart docker
$ docker info | grep 'Cgroup Driver'
Cgroup Driver: systemd
$ sudo systemctl daemon-reload && sudo systemctl restart kubelet
kubeadm init 실패 시 실행
$ sudo kubeadm reset
$ 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
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
k8s 인증파일 생성 됨
- 노출 되면 안됨
$ cd .kube
$ ls
config
$ ls -l
total 8
-rw------- 1 vagrant vagrant 5639 May 13 08:08 config
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker NotReady control-plane,master 9m20s v1.22.8
$ kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
$ curl https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O
costoum-resources.yaml
...
cidr: 172.16.0.0/16
...
$ kubectl create -f custom-resources.yaml
클러스트 상태 확인
$ 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
NAME STATUS ROLES AGE VERSION
docker Ready control-plane,master 30m v1.22.8
isolation 해제
$ kubectl taint node docker node-role.kubernetes.io/master-
$ kubectl create deployment myweb --image=ghcr.io/c1t1d0s7/go-myweb
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/myweb 1/1 1 1 4m40s
NAME DESIRED CURRENT READY AGE
replicaset.apps/myweb-97dbf5749 1 1 1 4m40s
NAME READY STATUS RESTARTS AGE
pod/myweb-97dbf5749-8tq2l 1/1 **Running** 0 4m40s
Pod 외부 노출
$ kubectl expose deployment myweb --port=80 --protocol=TCP --target-port=8080 --name myweb-svc --type=NodePort
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 33m
myweb-svc NodePort 10.103.90.115 <none> 80:32338/TCP 10s

$ curl 192.168.100.100:32338
Hello World!
myweb-97dbf5749-qb8tm
복제본 생성
$ kubectl scale deployment myweb --replicas=3
$ kubectl get pods
NAME STATUS AGE
myweb-97dbf5749-4krhf ContainerCreatin 5s
myweb-97dbf5749-c5s7h ContainerCreating 5s
myweb-97dbf5749-qb8tm Running 9m18s
서비스 삭제 & deployment 삭제
$ kubectl delete service myweb-svc
$ kubectl delete deployment myweb