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
복사
•
캡처화면
•
도커의 이미지를 쿠버네티스에 올렸다 이정도로 생각하면 된다.