Kubernetes를 kubeadm으로 설치

강재민·2022년 5월 13일
0

Kubernetes

목록 보기
1/29
post-thumbnail
post-custom-banner

도커가 미리 설치되어 있어야합니다


kubeadm, kubectl, kubelet 도구 설치

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
apt-cache madison kubelet | grep 1.22.8
apt-cache madison kubectl | grep 1.22.8

### 반드시 버전이 같아야함
sudo apt-get install kubeadm=1.22.8-00 kubelet=1.22.8-00 kubectl=1.22.8-00 -y
sudo apt-mark hold kubelet kubeadm kubectl

### 혹시나 나중에 apt upgrade 했을 경우 버전이 업데이트 되지 않도록 버전을 고정해줌

cgroup driver 오류

https://github.com/kubernetes/kubeadm/issues/2605

docker info | grep 'Cgroup Driver'
 
### Cgroup Driver: cgroupfs
sudo vi /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

k8s 클러스터 생성

### 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

init에 성공했다면 출력결과를 꼭 메모장이나 note기능이 있는 프로그램에 잘 저장해두자. 나중에 쓰이는 내용들이다.

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

### root권한으로 만든 파일은 소유자와 그룹이 root이므로 변경시켜준다.
kubectl get nodes

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


### CNI가 준비되지 않아서 NotReady라고 뜬다.

Calico Network Add-on

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

### custom파일은 우리가 설정한 값에 맞춰서 수정해주어야한다.
kubectl create -f custom-resources.yaml

클러스터 상태 확인

kubectl get pods -A   

### 결과값
### 모두 성공하게 되면 control-plane이 Ready상태가 된다.
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           ...

### 여기에 NAMESPACE와 도커의 네임스페이스는 전혀 상관이 없음
### kubelet이 없는 이유는 패키지로 설치했기 때문
### 왜 kubelet만 서비스일까? 왜 컨테이너가 아닐까에 대한 고민을 해볼 필요가 있다.


이 영역들이 존재하는 것을 알 수 있다.

kubectl get nodes

###결과값
NAME     STATUS   ROLES                  AGE   VERSION
docker   Ready    control-plane,master   30m   v1.22.8
kubectl taint node docker node-role.kubernetes.io/master-

### master node 에 untaint를 함으로써 Pod를 master node에도 생성할 수 있다.
taint 된 노드에는 Pod가 생기지 않음
post-custom-banner

0개의 댓글