본문 바로가기

Private Cloud/Kubernetes

Kubernetes 설치

1. 설치 환경

  • AWS EC2 t2-medium 3대(master 1대, worker 2대)
  • 선정 근거: 공식 문서에 최소 권장 사양이 CPU 2Core에 Memory 2GB이기 때문

참고 공식 문서

 

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

2. master node 생성

  • EC2 생성
  • 생성정보
    • Instance type: t2.medium
    • OS: Ubuntu 20.10
    • SSD: 8GB
    • Name: master
    • Security Group: 공식 문서의 권장 포트는 모두 해제

  • hostname 변경
    • 경로: /etc/hostname
    • 기존: ip-10-0-1-228
    • 변경: master
    • reboot

3. Container Runtime Interface 설치

  • 지원 CRI
    • Docker (설치)
    • Containered
    • CRI-O
  • 아래 공식 사이트 참고하여 설치
 

Install Docker Engine on Ubuntu

 

docs.docker.com

  • 설치 요약
    • sudo apt-get remove docker docker-engine docker.io containerd runc
    • sudo apt-get update
    • sudo apt-get install  apt-transport-https  ca-certificates  curl  gnupg lsb-release
    • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    • sudo apt-get update
    • sudo apt-get install docker-ce docker-ce-cli containerd.io

4. kubeadm 설치

  • sudo apt-get update
  • sudo apt-get install -y apt-transport-https ca-certificates curl
  • sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
  • 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
  • sudo apt-get update
  • sudo apt-get install -y kubelet kubeadm kubectl
  • sudo apt-mark hold kubelet kubeadm kubectl

5. AMI 생성

  • kubelet kubeadm kubectl이 설치된 EC2를 AMI로 생성

  • 생성된 AMI로 work1, work2 용 EC2 생성

6. kubeadm init 수행

  • 마스터 노드에서 root 계정으로 kubeadm init 수행 
  • 마스터 노드에서 아래 스크립트 수행 
  • mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config

7. worker 노드 추가

  • worker 노드에서 아래 스크립트 수행하여 worker 노드 추가
kubeadm join 10.0.1.228:6443 --token nh1mww.vw7fq72f53m6jcba \
	--discovery-token-ca-cert-hash sha256:53c88cb516b751cd5a87f44ff8b4027c043953b77d02c7d7deec0640702b53c5

8. Cluster Networking 설정

  • weave net 설치 해 봤으니 이번엔 calico 설치
  • calico는 kubernetes 유형별 설치 방법이 다양하게 존재함
  • 이 중 "Install Calico networking and network policy for on-premises deployments" 참고
 

Install Calico networking and network policy for on-premises deployments

Install Calico networking and network policy for on-premises deployments.

docs.projectcalico.org

  • calico 설치 확인 
더보기
ubuntu@master:~$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  185k  100  185k    0     0   213k      0 --:--:-- --:--:-- --:--:--  213k
ubuntu@master:~$ kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers created

9. 최종 상태 확인 

ubuntu@master:~$ kubectl get pod -n kube-system
NAME                                       READY   STATUS              RESTARTS   AGE
calico-kube-controllers-78d6f96c7b-7jkzf   1/1     Running             0          37s
calico-node-qmrml                          0/1     Running             0          37s
calico-node-th24k                          0/1     Running             0          37s
calico-node-w7hvr                          0/1     Running             0          37s
coredns-558bd4d5db-g42l8                   0/1     ContainerCreating   0          57m
coredns-558bd4d5db-gdmhx                   0/1     ContainerCreating   0          57m
etcd-master                                1/1     Running             0          57m
kube-apiserver-master                      1/1     Running             0          57m
kube-controller-manager-master             1/1     Running             0          57m
kube-proxy-26l5j                           1/1     Running             0          57m
kube-proxy-k544z                           1/1     Running             0          46m
kube-proxy-s86n4                           1/1     Running             0          46m
kube-scheduler-master                      1/1     Running             0          57m
ubuntu@master:~$ kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   57m   v1.21.1
work1    Ready    <none>                 47m   v1.21.1
work2    Ready    <none>                 47m   v1.21.1