설치 관련 주요 내용은 아래 사이트에
kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
[사전 설정] - 이 부분은 각 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/
[주요 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/
가. 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 도구도 위와 같이 별도 검색하여 설치 필요하다.
아래 내용은 추가적인 옵션이다.
- (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.
- (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
- (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 |
---|