본문 바로가기

CKA &. CKAD/Install "Kubernetes the kubeadm way"

Deployment with Kubeadm

 

설치 관련 주요 내용은 아래 사이트에

kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

Installing kubeadm

This page shows how to install the kubeadm toolbox. For information how to create a cluster with kubeadm once you have performed this installation process, see the Using kubeadm to Create a Cluster page. Before you begin A compatible Linux host. The Kubern

kubernetes.io


[사전 설정] - 이 부분은 각 Node별로 모두 설치 필요

 

먼저 OS 정보 확인

cat /etc/os-release

설치 페이지에서 OS별 설치 방법 확인 후 진행

 

iptables가 bridged traffic을 보도록 설정

$ lsmod | grep br_netfilter

아무런 결과가 없다면 아래와 같이 br_netfilter 설치

$ sudo modprobe br_netfilter
$ lsmod | grep br_netfilter

 

위 과정을 kubernetes 설치를 위한 각 master/worker 노드에 설치 진행

그 이후 위의 k8s.conf 설정

cat <<EoF | sudo tee /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables =1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
sudo sysctl --system

[Docker 설치] - 이 부분은 각 노드별로 모두 설치 필요

 

docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com


[주요 Tool 설치 (kubeadm, kubelet, kubectl) ] - 이 부분은 각 노드별로 모두 설치 필요

 

Docker 설치 후 다시 kubernetes install 페이지로 돌아와서 kubernetes 주요 tool(kubeadm, kubelet, kubectl) 설치

  • kubeadm: the command to bootstrap the cluster.
  • kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
  • kubectl: the command line util to talk to your cluster.

1. apt package index를 업데이트 하고 Kubernetes apt repository를 사용하는데 필요한 패키지를 설치

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

2. Google Cloud public signing key 다운로드

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

3. Kubernetes apt repository 추가

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

4. apt package index를 업데이트 후 kubelet, kubeadm, kubectl과 해당 버전으로 고정한다.

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

[ cgroup driver 구성 (kubelet에 의해 사용) ]

 

docker 설치 시 자동으로 cgroup이 삭제되어 구성 불필요

 


[kubeadm으로 Kubernetes Cluster 구성]

 

kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

 

Creating a cluster with kubeadm

Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su

kubernetes.io

가. Initializing control-plane node

 

kubernetes 사이트에 초기화 설명서에 보면 아래 내용이 정리되어 있다.

 

 1st. (Recommended) If you have plans to upgrade this single control-plane kubeadm cluster to high availability you should specify the --control-plane-endpoint to set the shared endpoint for all control-plane nodes. Such an endpoint can be either a DNS name or an IP address of a load-balancer.

 

2nd. Choose a Pod network add-on, and verify whether it requires any arguments to be passed to kubeadm init. Depending on which third-party provider you choose, you might need to set the --pod-network-cidr to a provider-specific value. See Installing a Pod network add-on.

원래는 이 이미지가 나왔는데 현재는 Pod Network Add-On 설치 링크가 삭제되어 찾을 수 없다

따라서 아래의 링크를 찾아서 설치 한다. (kubeadm init 이후 설치)

Weave Net 설치 (www.weave.works/docs/net/latest/kubernetes/kube-addon/)

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

Calico 설치 (docs.projectcalico.org/getting-started/kubernetes/quickstart)

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml

기타 Network 도구도 위와 같이 별도 검색하여 설치 필요하다.

 

아래 내용은 추가적인 옵션이다.

  1. (Optional) Since version 1.14, kubeadm tries to detect the container runtime on Linux by using a list of well known domain socket paths. To use different container runtime or if there are more than one installed on the provisioned node, specify the --cri-socket argument to kubeadm init. See Installing runtime.
  2. (Optional) Unless otherwise specified, kubeadm uses the network interface associated with the default gateway to set the advertise address for this particular control-plane node's API server. To use a different network interface, specify the --apiserver-advertise-address=<ip-address> argument to kubeadm init. To deploy an IPv6 Kubernetes cluster using IPv6 addressing, you must specify an IPv6 address, for example --apiserver-advertise-address=fd00::101
  3. (Optional) Run kubeadm config images pull prior to kubeadm init to verify connectivity to the gcr.io container image registry

 

먼저 control plane을 초기화 하기 위해 아래 명령을 수행 한다.

pod-network-cidr는 POD에게 할당되는 IP CIDR 대역이며 advertise-address는 master server IP 이다.

kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address=192.168.56.2 

설치가 완료되면 위의 comment가 보이며 root user에서 일반 user로 스위치 하여 위 comment에 나와 있는 설정을 수행한다.

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

만약 root user라면 다음과 같이 수행한다.

export KUBECONFIG=/etc/kubernetes/admin.conf

 

나. POD Network solution 설치

 

설치 완료 후 나오는 위의 comment에서 

을 확인하여 copy 후 다른 node에 연결하여 수행한다. (필요한 node별로 모두 수행한다.)

 

token은 kubeadm token 명령어를 수행하여 화면에 표시 가능하다.

kubeadm token --print-join-command

현 서버에서 kubectl get nodes를 하면 아래와 같이 나온다.

kubectl get nodes

 

이는 POD Network 구성이 되어 있지 않아서이며 이제 Network Addon 을 설치한다

여기서는 Weave Net으로 설치한다. (위에서 설치 링크 확인)

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

kubadm init에서 나온 아래 내용을 각 worker node를 join 하기 위해 각 node에서 수행

 

이후 master node에서 kubectl get node 수행

kubectl get nodes

각 노드별로 정상적으로 kubectl get node가 작동하는지 확인

 

이제 설치 완료 후 간단한 pod가 잘 생성되는지 확인

kubectl run nginx --image=nginx
kubectl get pods

정상적으로 설치 되었는지 확인 후 삭제...

'CKA &. CKAD > Install "Kubernetes the kubeadm way"' 카테고리의 다른 글

ETCD in HA  (0) 2021.04.01