///
Search
📤

03.쿠버네티스 Master 노드와 Work 노드 세팅 및 Nginx 배포 실습

kubeadm

root@master:~# kubeadm init [init] Using Kubernetes version: v1.21.3 [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR Swap]: running with swap on is not supported. Please disable swap [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher root@master:~# ^C root@master:~#
Ruby
복사
위의 문구를 보면 Please disable swap 이라는 문구가 있다, 그래서 swap을 off 해준다.
swapoff -a
Ruby
복사
위의 방식으로 해도 무관하나 이 방식은 reboot 되면 다시 말짱꽝 된다.
그러니 아래 문구를 추가하는 방식으로 해보자
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Ruby
복사
Swap 하는 이유
Kubernetes 에서 스왑을 비활성화하는 이유
Kubernetes 1 8 이후 노드에서 스왑을 비활성화해야 함 또는 fail swap on 을 false 로 설정
kubernetes 의 아이디어는 인스턴스를 최대한 100 에 가깝게 성능을 발휘하는 것
모든 배포는 CPU/ 메모리 제한을 고정하는 것이 필요
따라서 스케줄러가 포드를 머신에 보내면 스왑을 사용하지 않는 것이 필요
스왑 발생시 속도가 느려지는 이슈 발생
성능을 위한 것
참고문헌
그리고 나서 다시 kubeadm init을 해준다.
root@master:~# kubeadm init [init] Using Kubernetes version: v1.21.3 [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
Ruby
복사
조금 수 분이 흐르게 되면 추가로 계속 진행하게 된다.
마무리 화면
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 Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.0.2.15:6443 --token 4zxvsx.rlp3ebunew3k19br \ --discovery-token-ca-cert-hash sha256:045171d3a137e06f15c5dc5339c6a4457e5533fc34a522021a4389327037676b root@master:~# root@master:~#
Ruby
복사
그러면 Master 컴퓨터내에서 cmd 창을 하나 더 열어시 일반 사용자 권한으로 아래의 명령어를 쳐준다.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ruby
복사
그러먼 kubectl로 node get 해서 노드를 확인을 해본다.
server1@master:~$ mkdir -p $HOME/.kube server1@master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [sudo] server1의 암호: 죄송합니다만, 다시 시도하십시오. [sudo] server1의 암호: server1@master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config server1@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 6m30s v1.21.3 server1@master:~$
Ruby
복사
위로 3번째에 kubeadm join 이라는 문구가 있는 내용을 다른 vm프로그램(work1, work2)에 복제해준다.
kubeadm join 10.0.2.15:6443 --token 4zxvsx.rlp3ebunew3k19br \ --discovery-token-ca-cert-hash sha256:045171d3a137e06f15c5dc5339c6a4457e5533fc34a522021a4389327037676b
Ruby
복사
이렇게 나오면 정상!
server1@work1:~$ sudo -i [sudo] server1의 암호: root@work1:~# swapoff -a root@work1:~# sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab root@work1:~# kubeadm join 10.0.2.15:6443 --token 4zxvsx.rlp3ebunew3k19br \ > --discovery-token-ca-cert-hash sha256:045171d3a137e06f15c5dc5339c6a4457e5533fc34a522021a4389327037676b [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml' [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... 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. root@work1:~#
Ruby
복사
다시 master에서 cmd 창에 아래처럼 검색하면 추가된 것을 확인할 수 있다.
server1@master:~$ mkdir -p $HOME/.kube server1@master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [sudo] server1의 암호: 죄송합니다만, 다시 시도하십시오. [sudo] server1의 암호: server1@master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config server1@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 6m30s v1.21.3 server1@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 18m v1.21.3 work1 NotReady <none> 39s v1.21.3 work2 NotReady <none> 37s v1.21.3 server1@master:~$
Ruby
복사
위의 자료 보면 NotReady라고 뜨는 것을 확인할 수 있는데 이 문제를 해결하려면 아래의 링크로 간다.
Pod Network를 추가하기 위해 아래의 명령어를 작성한다. (WeaveNet 활용)
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Ruby
복사
실행화면(Redy로 전환 확인 가능)
server1@master:~$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.apps/weave-net created server1@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master 32m v1.21.3 work1 Ready <none> 14m v1.21.3 work2 Ready <none> 14m v1.21.3 server1@master:~$
Ruby
복사
kubectl를 통해서 nginx 배포 연습
server1@master:~$ kubectl run nginx --image=nginx pod/nginx created server1@master:~$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 21s server1@master:~$ kubectl port-forward nginx 80:80 Unable to listen on port 80: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 127.0.0.1:80: bind: permission denied unable to create listener: Error listen tcp6 [::1]:80: bind: permission denied] error: unable to listen on any of the requested ports: [{80 80}] server1@master:~$ kubectl port-forward nginx 8080:8080 Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080 Handling connection for 8080 E0719 21:09:25.716522 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18596] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.729795 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18597] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.747579 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18598] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.758759 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18599] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.777284 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18600] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.805193 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18602] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.821113 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18603] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.830903 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18604] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.838840 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18605] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused Handling connection for 8080 E0719 21:09:25.846067 23359 portforward.go:400] an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod 65a93c59aa2f5ef75f45e6af14679514092cff192b31c23a83a240798e128717, uid : exit status 1: 2021/07/19 21:09:26 socat[18606] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused ^Cserver1@master:~$ kubectl port-forward nginx 8080:80 Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80 Handling connection for 8080
Ruby
복사
캡처화면
도커의 이미지를 쿠버네티스에 올렸다 이정도로 생각하면 된다.