kubeadm 으로 kubernetes 를 구성 합니다.
테스트 장비는 vm / ubuntu 20.04 로 테스트 하였습니다.
master , node 와 모든 설치 과정이 동일하며, kubeadm init 의 경우 master 에서 실행 하며,
node 에서는 kubeadm join 을 하여 kubernetes 클러스터에 추가 합니다.

hostname 설정

$ sudo vi /etc/hosts
192.168.0.10          k8s-master
192.168.0.11          k8s-node01
192.168.0.12          k8s-node02

swap disable

$ sudo vi /etc/fstab
#/swap.img      none    swap    sw      0       0
$ sudo swapoff -a

system upgrade 및 system rebooting

$ sudo apt update
$ sudo apt list --upgradable
$ sudo apt upgrade -y
$ sudo init 6

기본 설치 docker remove

$ sudo apt-get remove docker docker-engine docker.io containerd runc

docker 설치

# add gpg key 
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 레포지터리 설정 
$ echo \
"deb [arch=$(dpkg --print-architecture) 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 설치 
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
$ sudo apt install -y nfs-common 
$ sudo systemctl enable docker.service --now
$ sudo usermod -aG docker ubuntu

kernel-parameter 설정

$ sudo cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

$ sudo sysctl --system

docker 디렉토리 생성 및 cgroup driver 변경

$ sudo vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker info | grep -i cgroup

kubelet , kubeadm , kubectl 설치

$ sudo apt-get install -y apt-transport-https ca-certificates curl

# google cloud public 키 등록및 apt repository 설정 
# kubelet , kubeadm , kubectl 설치 및 update 중지 

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
  echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && \
  sudo apt-get update -q && \
  sudo apt-get install -qy kubelet=1.21.14-00 kubeadm=1.21.14-00 kubectl=1.21.14-00

$ sudo apt-mark hold kubelet kubeadm kubectl

master 에서 kubeadm init 명령어 실행

$ sudo kubeadm init --apiserver-advertise-address=192.168.0.10 --pod-network-cidr=192.168.0.0/16 --cri-socket=/var/run/dockershim.sock
~
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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 192.168.0.10:6443 --token lnyrpq.sjgabz4x6mqsbj6j \
        --discovery-token-ca-cert-hash sha256:0abfc94648b8ef71befa09f188f21349c69db533f5df71c8a880ecaf149a4f92

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

모든 명령어는 master 또는 bastion-host 에서 실행 합니다.
문서의 테스트 환경은 별도의 bastion-host 가 없으니 master 에서 실행 합니다.
calico cni 설치

$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

pod 정보 확인

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-69f595f8f8-pq2kn   1/1     Running   0          98s
kube-system   calico-node-qnhq8                          1/1     Running   0          98s
kube-system   coredns-558bd4d5db-89vxr                   1/1     Running   0          5m37s
kube-system   coredns-558bd4d5db-kvxn9                   1/1     Running   0          5m37s
kube-system   etcd-k8s-master                            1/1     Running   0          5m43s
kube-system   kube-apiserver-k8s-master                  1/1     Running   0          5m45s
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          5m44s
kube-system   kube-proxy-h7qfr                           1/1     Running   0          5m37s
kube-system   kube-scheduler-k8s-master                  1/1     Running   0          5m43s

node join
node01 , node02 에서 실행 합니다.

$ sudo kubeadm join 192.168.0.10:6443 --token lnyrpq.sjgabz4x6mqsbj6j \
        --discovery-token-ca-cert-hash sha256:0abfc94648b8ef71befa09f188f21349c69db533f5df71c8a880ecaf149a4f92

master 에서 kubernetes node 를 확인 합니다.

$ kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   4m40s   v1.21.14
k8s-node01   Ready    <none>                 4m7s    v1.21.14
k8s-node02   Ready    <none>                 3m56s   v1.21.14

kubectl 자동완성

$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ vi .bashrc
alias l='ls -CF'
alias k='kubectl'
$ source .bashrc

만약 node 추가 중 오류가 발생 하여 추가가 안된다면 kubeadm reset 을 진행 합니다.

$ sudo kubeadm reset
Last modified: 2022-11-02

Author

Comments

Write a Reply or Comment