2022. 5. 23. 13:53ㆍ프로그래밍 개발(Development)/k8s
Spec
- OS : ubuntu server 20.04
- vm : 2vm(2core, 4mb, 50GB) (master node, worker node)
K8s 설치 이전에 Docker 설치를 우선 진행 한다.
Before installing K8s, install Docker first.
OS의 기본 환경 설정은 minimal로 설치 후 openssh 정도만 설치 해 주었다.
※ 모든 설치는 root 계정으로 진행한다.
공통 요소
1. Docker 설치
repository 설정하기
apt package index를 업데이트 하고 HTTPS를 통해 repository 를 이용하기 위해 pakcage 들을 설치 한다.
$ apt-get update
$ apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
Docker의 Official GPG Key 를 등록한다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
stable repository를 등록한다.
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
아래의 명령어를 통해 Docker를 설치 한다.
$ apt-get update
$ apt-get install docker-ce docker-ce-cli containerd.io
정상적으로 설치가 되었는지 확인한다.
$ docker --version
※ 수동으로 Docker를 설치해야 하는 경우 아래의 글 참고
2022.02.23 - [프로그래밍 개발(Development)/Docker] - Docker, Docker-compose 수동 설치(Centos, ubuntu)
2. Swap off
kubelet에서 swap을 지원하지 않기 때문에, Master/Worker 모두 swap 기능을 꺼야 한다.
$ swapoff -a
영구적으로 기능을 끄기 위해서는 /etc/fstab파일에서 일부 주석 처리를 진행 해야한다.
$ nano /etc/fstab
swap 부분을 찾아서 주석 처리를 한다.
#/swap.img none swap sw 0 0
3. Cgroup driver 설정
$ docker info
Cgroup driver가 "cgroupfs"로 설정되어 있는걸 확인 할 수 있다. 이 부분을 "systemd"로 변경하자.
$ nano /etc/docker/daemon.json
아래의 같이 입력해준다.
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
$ mkdir -p /etc/systemd/system/docker.service.d
$ systemctl daemon-reload
$ systemctl restart docker
4. kubernetes 설치
Master / worker node 모두 kubeadm, kubelet, kubectl 3개의 패키지가 설치되어야 한다.
추가적으로 kubernetes-cni, cri-tools 2개 패키지도 설치 한다.
아래에서 최신 버전의 주소(파일명) 확인이 가능하다. (16.04 이후 버전 모두 동일)
https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages
패키지 다운로드.
$ wget https://packages.cloud.google.com/apt/pool/cri-tools_1.13.0-01_amd64_4ff4588f5589826775f4a3bebd95aec5b9fb591ba8fb89a62845ffa8efe8cf22.deb
$ wget https://packages.cloud.google.com/apt/pool/kubeadm_1.20.1-00_amd64_7cd8d4021bb251862b755ed9c240091a532b89e6c796d58c3fdea7c9a72b878f.deb
$ wget https://packages.cloud.google.com/apt/pool/kubectl_1.20.1-00_amd64_b927311062e6a4610d9ac3bc8560457ab23fbd697a3052c394a1d7cc9e46a17d.deb
$ wget https://packages.cloud.google.com/apt/pool/kubelet_1.20.1-00_amd64_560a52294b8b339e0ca8ddbc480218e93ebb01daef0446887803815bcd0c41eb.deb
$ wget https://packages.cloud.google.com/apt/pool/kubernetes-cni_0.8.7-00_amd64_ca2303ea0eecadf379c65bad855f9ad7c95c16502c0e7b3d50edcb53403c500f.deb
패키지 설치 진행
$ apt-get install socat conntrack ebtables
$ dpkg --install ./kubernetes-cni_0.8.7-00_amd64_ca2303ea0eecadf379c65bad855f9ad7c95c16502c0e7b3d50edcb53403c500f.deb
$ dpkg --install ./kubelet_1.20.1-00_amd64_560a52294b8b339e0ca8ddbc480218e93ebb01daef0446887803815bcd0c41eb.deb
$ dpkg --install ./cri-tools_1.13.0-01_amd64_4ff4588f5589826775f4a3bebd95aec5b9fb591ba8fb89a62845ffa8efe8cf22.deb
$ dpkg --install ./kubectl_1.20.1-00_amd64_b927311062e6a4610d9ac3bc8560457ab23fbd697a3052c394a1d7cc9e46a17d.deb
$ dpkg --install ./kubeadm_1.20.1-00_amd64_7cd8d4021bb251862b755ed9c240091a532b89e6c796d58c3fdea7c9a72b878f.deb
여기까지 진행 했다면, 공통 요소의 설치는 모두 끝이 났다.
그럼 VM을 복제하여 한개를 더 생성하자.
Master Node 설정
동일한 VM일 경우 hostname이 동일하면 안되기 때문에 hostname을 변경해준다.
hostname명을 master로 설정 하였다.
$ hostnamectl set-hostname master
host의 IP를 확인한다. 둘중에 하나를 사용해도 된다.
minimal 버전이라면 ifconfig는 동작하지 않을 수 있다.
$ ip addr
or
$ ifconfig
IP를 확인 했으니 이제 설정 해보자. 아래와 같이 Host IP를 입력하고 Init을 한다.
$ kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.102.111
# ex) $ kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<Host IP>
정상적으로 진행이 되면 아래와 같이 가장 마지막 부분에 토큰 정보가 출력이 된다.
kubeadm join 192.168.102.111:6443 --token uifaqn.c8lsjrqts493mw7u \
--discovery-token-ca-cert-hash sha256:2f3bd4a77fe040d1211d1ba684885ec0a8905160fc5cd5b6296525bf087ef7cc
사용자 계정에서 kubectl 실행을 할 수 있도록 설정을 해본다.
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config
잘 설치가 되었는지 확인해보자.
아래의 명령어를 통해서 node 정보가 제대로 호출 되는지 확인한다.
$ kubectl get pods --all-namespaces
$ kubectl get nodes
Pod Network 환경을 맞춰야 하는데, k8s를 위한 layer 3환경을 구축해주는 flannel을 사용한다.
https://github.com/coreos/flannel/
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl get pods --all-namespaces
$ kubectl get nodes
coredns : Pending -> Running 변경
kube-flannel 추가
Master Node : Not Ready -> Ready 상태 변경
Worker 설정
Worker도 마찬가지로 hostname을 변경 해준다.
hostname은 worker1으로 설정 하였다.
$ hostnamectl set-hostname worker1
기본 설정은 공통 요소에서 모두 설치 되었기 때문에, Master에서 Init 후 생성된 정보만 입력 해주면 된다.
$ kubeadm join 192.168.102.111:6443 --token uifaqn.c8lsjrqts493mw7u \
--discovery-token-ca-cert-hash sha256:2f3bd4a77fe040d1211d1ba684885ec0a8905160fc5cd5b6296525bf087ef7cc
...
...
...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
위와 같은 내용이 나오면 정상적으로 join이 된것이다.
이제 Master에서 join이 제대로 되었는지 확인해보자.
$ kubectl get nodes
여기까지 진행을 했으면 모든 설정이 끝났다.
정상 동작을 하는지 확인을 해보자.
Kubernetes 동작 확인
Master Node에서 다음과 같이 deployment를 생성하자.
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
아래의 명령어를 통해 확인
$ kubectl get deployments
$ kubectl get pods -o wide
Worker Node에서 해당 서비스가 잘 되는지 확인해보자.
$ curl http://10.244.1.4:8080
Hellow kubernetes가 정상적으로 출력 되는 것을 확인.
끝.
'프로그래밍 개발(Development) > k8s' 카테고리의 다른 글
쿠버네티스 컨테이너 타임존 설정하기(Setting the Kubernetes container timezone) (0) | 2022.06.17 |
---|---|
Kubernetes에 ELK(Kibana) 구축하기 #3 (2) | 2022.06.17 |
Kubernetes에 ELK(Logstash) 구축하기 #2 (0) | 2022.06.16 |
Kubernetes에 ELK(Elasticsearch) 구축하기 #1 (0) | 2022.06.16 |
Kubernetes Dashboard 설치(Install k8s dashboard) (0) | 2022.05.23 |