Cloud

Kubernetes Cluster on Rhel7 설치 2

naleejang 2020. 12. 31. 17:26

지난포스팅에서 쿠버네티스를 설치하기 위해 VM을 생성하고, 생성한 VM에 쿠버네티스 설치를 위한 다양한 설정작업을 해 주었다면, 이번에는 쿠버네티스를 직접 설치해 보도록 하겠습니다. 쿠버네티스 설치시 제공하는 네트워크 프로바이더가 많아서 무엇을 선택해야 할지 잘 몰라 Kubernetes Korea Group에 물어봤는데 다들 친절하게 알려주셔서 설치도 쉽고 동작도 잘 되는 Calico 네트워크를 선택하여 설치하였습니다. 도움주신 분들에게 감사드립니다.

3. Kubeadm, kubelet, kubectl 설치

그럼 지금부터 쿠버네티스를 설치해 보도록 하겠습니다. 

3.1 쿠버네티스 리포지토리 설정

먼저 쿠버네티스 설치를 위한 쿠버네티스 리포지토리를 먼저 설정해야 합니다. 리포지토리 정보는 쿠버네티스 공식 매뉴얼에서 확인할 수 있습니다. 해당 문서를 참조하여 아래와 같이 master 노드와 worker 노드에 리포지토리를 설정합니다.

# master node에 쿠버네티스 리포지토리 생성
[root@master ~]# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl

# master node에 생성한 쿠버네티스 리포지토리 파일을 worker 노드에 복사
[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo root@worker1:/etc/yum.repos.d/
[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo root@worker2:/etc/yum.repos.d/

 

3.2 SELinux 설정 및 kubelet, kubeadm, kubectl 설치

리포지토리 설정이 끝나면 Master 노드 및 worker 노드에  SELINUX 설정을 변경하고 kubeadm, kubelet kubectl을 설치합니다.

 

# SELINUX 설정 변경
[root@master ~]# setenforce 0
[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# master 노드에 kubeadm, kubelet, kubectl 설치
[root@master ~]# yum install -y kubeadm kubelet kubectl --disableexcludes=kubernetes

# kubelet 서비스 활성화
[root@master ~]# systemctl enable --now kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

# worker 노드에도 동일하게 SELINUX 설정 변경 및 kubeadm, kubelet, kubectl 설치
[root@master ~]# for i in worker1 worker2; do 
 ssh root@$i setenforce 0
 ssh root@$i sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
 ssh root@$i yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
 ssh root@$i systemctl enable --now kubelet
done

 

4. 쿠버네티스 설치

쿠버네티스 리포지토리를 설정하고, Kubeadm, kubelet, kubectl을 설치했다면 master 노드 먼저 쿠버네티스를 설치합니다.

4.1 쿠버네티스 마스터 노드 설치

Kubeadm 명령어를 이용하여 아래와 같이 쿠버네티스를 마스터 노드에 설치합니다. 이때 마스터 노드와 워커 노드에 생성되는 pod와 컨테이너가 서로 통신 할 수 있도록 pod 네트워크 IP 대역을 설정해 주어야 하는데, 이때 설정해 주는 IP 대역은 호스트에서 사용하지 않은 네트워크 대역이여야 합니다. 그리고, 해당 네트워크는 addon 네트워크를 설치할때 영향을 줍니다. 

 

# pod-network IP 대역과 함께 kubeadm init 명령어로 쿠버네티스 설치
[root@master ~]# kubeadm init --pod-network-cidr=192.165.0.0/16
[init] Using Kubernetes version: v1.20.1
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
[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'
...
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes master-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.203:6443 --token 7qykl2.gyq66dbc2pcod1xb \
    --discovery-token-ca-cert-hash sha256:c9a22c0cfd3a2f88e1d679584fff284458c189c2755bf3b15e07043fec9b5bd9

 

이렇게 master 노드에 쿠버네티스를 설치하면 docker에 master 노드에 필요한 container가 생성되며, 이는 docker ps  명령어를 통해 아래와 같이 확인할 수 있습니다. 생성된 컨테이너를 잘 살펴보면, 쿠버네티스 아키텍처에서 많이 보던 익숙한 이름들을 확인할 수 있습니다.

[root@control ~]# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS              PORTS               NAMES
6b24537c6b96        bfe3a36ebd25           "/coredns -conf /e..."   About a minute ago   Up About a minute                       k8s_coredns_coredns-74ff55c5b-z47d8_kube-system_8940551a-8075-4d0a-a9d4-1d1cce2271e0_0
b0637d9d8a5b        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_coredns-74ff55c5b-5ctxv_kube-system_7a587bf2-ffa9-4a09-a1d8-174f5b629e8d_0
0a112c01ee26        e3f6fcd87756           "/usr/local/bin/ku..."   About a minute ago   Up About a minute                       k8s_kube-proxy_kube-proxy-rlq5z_kube-system_051e80d0-bebe-48a2-9281-d160ee4589e5_0
5988bb141cf1        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_kube-proxy-rlq5z_kube-system_051e80d0-bebe-48a2-9281-d160ee4589e5_0
6b0397a7281a        2893d78e47dc           "kube-controller-m..."   About a minute ago   Up About a minute                       k8s_kube-controller-manager_kube-controller-manager-control_kube-system_9652c20698b35b402d9f73fb87455120_0
bea20f4eddbb        4aa0b4397bbb           "kube-scheduler --..."   About a minute ago   Up About a minute                       k8s_kube-scheduler_kube-scheduler-control_kube-system_9be8cb4627e7e5ad4c3f8acabd4b49b3_0
5267b31519dc        75c7f7112080           "kube-apiserver --..."   About a minute ago   Up About a minute                       k8s_kube-apiserver_kube-apiserver-control_kube-system_20b2b09ca80c741783eb6b83a552ac7c_0
a5d0e480368c        0369cf4303ff           "etcd --advertise-..."   About a minute ago   Up About a minute                       k8s_etcd_etcd-control_kube-system_bb0410fa2ef0ff53783684f6b2d5ea4e_0
004bac4cb2de        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_kube-scheduler-control_kube-system_9be8cb4627e7e5ad4c3f8acabd4b49b3_0
42132ad46b53        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_kube-controller-manager-control_kube-system_9652c20698b35b402d9f73fb87455120_0
9a240fec652f        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_kube-apiserver-control_kube-system_20b2b09ca80c741783eb6b83a552ac7c_0
17faa94ce76c        k8s.gcr.io/pause:3.2   "/pause"                 About a minute ago   Up About a minute                       k8s_POD_etcd-control_kube-system_bb0410fa2ef0ff53783684f6b2d5ea4e_0
[root@control ~]# 

 

4.2 Addon 네트워크 설치

Master 노드에 쿠버네티스가 설치되면 이번에는 네트워크르를 추가 설치해야 합니다. 저와 같은 경우에는 cailoco 공식 매뉴얼을 (t.ly/k3kC) 참조하여 네트워크를 아래와 같이 추가해 주었습니다. 처음에는 검색했던 블로그에 나와 있던 flannel을 이용하려고 했으나, 여러 버전의 샘플들이 많이 있어서 어떤걸로 써야 정상적으로 네트워크가 생성되고 동작하는지를 알 수가 없었습니다. 몇가지 버전을 테스트 해보았지만 정상동작하지 않아 Kubernetes Korea Group에 물어봤더니 Cailoco를 추천해 주어 설치를 하게 되었습니다. 그런데, 생각보다 설치방법도 간단하고, 무엇보다 쿠베네티스가 정상 동작을 한다는 것이였습니다.

 

1) 먼저 root 계정에서 kubectl 명령어를 사용하기 위해 /etc/kubernetes/admin.conf 파일을 KUBECONFIG로 환경변수 처리해 주고, kubectl 명령어를 이용하여 아래와 같이 tigera-operator.yaml을 이용하여 네트워크 관련 서비스를 생성합니다.

[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@master ~]# kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
...
namespace/tigera-operator created
podsecuritypolicy.policy/tigera-operator created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created

 

2) 이번에는 custom-resource.yaml 파일을 wget으로 다운로드 받습니다. 공식 매뉴얼에서 가이드하는 네트워크 IP를 사용하여 pod-network-range를 설정한 경우에는 다운로드 받을 필요가 없지만, 다른 네트워크를 사용한 경우라면 네트워크 IP 대역을 수정하여 생성해 주어야 합니다. 

# custom-resources.yaml 파일 다운로드
[root@master ~]# wget https://docs.projectcalico.org/manifests/custom-resources.yaml
--2020-12-29 14:47:34--  https://docs.projectcalico.org/manifests/custom-resources.yaml
Resolving docs.projectcalico.org (docs.projectcalico.org)... 104.248.50.87, 162.243.166.170, 2604:a880:400:d0::6d9:d001, ...
Connecting to docs.projectcalico.org (docs.projectcalico.org)|104.248.50.87|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 545 [application/x-yaml]
Saving to: ‘custom-resources.yaml’

100%[===========================================================================================================>] 545         --.-K/s   in 0s      

2020-12-29 14:47:35 (17.6 MB/s) - ‘custom-resources.yaml’ saved [545/545]

# custom-resources.yaml 파일 내의 cidr 정보 수정
[root@master ~]# vi custom-resources.yaml 
# This section includes base Calico installation configuration.
# For more information, see: https://docs.projectcalico.org/v3.17/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  # Configures Calico networking.
  calicoNetwork:
    # Note: The ipPools section cannot be modified post-install.
    ipPools:
    - blockSize: 26
      cidr: 192.165.0.0/16
      encapsulation: VXLANCrossSubnet
      natOutgoing: Enabled
      nodeSelector: all()

# 수정한 파일을 이용하여 네트워크 서비스 생성
[root@master ~]# kubectl create -f ./custom-resources.yaml 
installation.operator.tigera.io/default created

 

3) 이렇게 네트워크 서비스를 생성하면 kubectl get pods 명령어를 이용하여 아래와 같이 pod가 생성되는 것을 확인할 수 있습니다. Calico-system 의 모든 pod가 Running 상태가 되면, 마스터 노드에 걸려있던 taint 설정을 해제합니다. 

# kubectl get pods 명령어를 이용하여 pod 상태가 Running 으로 될때까지 기다림.
[root@master ~]# watch kubectl get pods -n calico-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-546d44f5b7-s64kv   1/1     Running   0          122m
calico-node-cc42m                          0/1     Running   0          113m
calico-typha-74ff4c5f45-48xmj              1/1     Running   0          111m

# 마스터 노드에 설정되어 있던 taint 설정 해제
[root@master ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
node/control untainted

# kubectl get nodes 명령어를 이용하여 Ready 상태인지 확인
[root@master ~]# kubectl get nodes -o wide
NAME      STATUS   ROLES                  AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                                      KERNEL-VERSION                CONTAINER-RUNTIME
master   Ready    control-plane,master   7m43s   v1.20.1   192.168.0.203   <none>        Red Hat Enterprise Linux Server 7.8 (Maipo)   3.10.0-1127.18.2.el7.x86_64   docker://1.13.1

 

** taint는 노드가 pod가 생성되지 못하도록 하는 설정으로 taint를 해제하면 master 노드에도 pod가 생성될 수 있습니다.

4.3 쿠버네티스 워커 노드 등록

1) 이번에는 워커 노드를 master 노드에 등록합니다. Master 노드에 쿠버네티스 설치시 결과로 출력되었던 상태 메시지 마지막에 worker노드에서 실행할 명령어를 확인할 수 있습니다. 해당 명령어를 복사하여 worker 노드에 아래와 같이 붙여넣기를 한 후 엔터를 치면 worker 노드가 master 노드에 등록이 됩니다.

[root@worker1 ~]# kubeadm join 192.168.0.203:6443 --token 7qykl2.gyq66dbc2pcod1b \
>     --discovery-token-ca-cert-hash sha256:c9a22c0cfd3a2f88e1d679584fff284458c189c2755bf3b15e07043fec9b5bd9
[preflight] Running pre-flight checks
[WARNING Hostname]: hostname "worker1" could not be reached
[WARNING Hostname]: hostname "worker1": lookup worker1 on 210.220.163.82:53: no such host
[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@worker1 ~]#

 

2) 두번째 worker 노드 역시 동일한 명령어를 붙여넣기 하면 아래와 같이 master  노드에 worker 노드를 등록할 수 있습니다.

[root@worker2 ~]# kubeadm join 192.168.0.203:6443 --token 7qykl2.gyq66dbc2pcod1b \
>     --discovery-token-ca-cert-hash sha256:c9a22c0cfd3a2f88e1d679584fff284458c189c2755bf3b15e07043fec9b5bd9
[preflight] Running pre-flight checks
[WARNING Hostname]: hostname "worker2" could not be reached
[WARNING Hostname]: hostname "worker2": lookup worker2 on 210.220.163.82:53: no such host
[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@worker2 ~]#

 

4.4 등록된 워커 노드 확인

이렇게 등록된 노드는 마스터 노드에서 kubectl get nodes 명령어를 이용하여 아래와 같이 확인할 수 있습니다.

[root@master ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE     VERSION
master    Ready    control-plane,master   16m     v1.20.1
worker1   Ready    <none>                 2m43s   v1.20.1
worker2   Ready    <none>                 75s     v1.20.1

 

5. 쿠버네티스 인프라 확인

이렇게해서 쿠버네티스를 설치해 봤습니다. 그럼, 쿠버네티스가 설치된 노드에서는 어떤 자원들이 생성되었는지 확인해 보겠습니다.

5.1 마스터 노드

마스터노드에서 ip a 명령어를 입력하면 아래와 같이 calico에 의해 생성된 vxlan.calico와 해당 네트워크를 사용하여 파생된 if3으로 끝나는 가상 네트워크들을 확인할 수 있습니다. 물론, docker ps 명령어를 통해 생성된 컨테이너 및 pod 목록도 함께 확인할 수 있습니다.

# 네트워크 정보 확인
[root@master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:62:72:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.203/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::8ae2:488b:e299:c016/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:8c:e2:e2:9c brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
4: calia9f658b016e@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link 
       valid_lft forever preferred_lft forever
5: calia03bb3361d8@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link 
       valid_lft forever preferred_lft forever
6: calibdbba750396@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link 
       valid_lft forever preferred_lft forever
7: vxlan.calico: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 66:2a:ee:de:80:be brd ff:ff:ff:ff:ff:ff
    inet 192.165.42.192/32 scope global vxlan.calico
       valid_lft forever preferred_lft forever
    inet6 fe80::642a:eeff:fede:80be/64 scope link 
       valid_lft forever preferred_lft forever
[root@master ~]# 

# 컨테이너 목록 확인
[root@master ~]# docker ps
CONTAINER ID        IMAGE                                                                                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
0c3db3a2800b        docker.io/calico/kube-controllers@sha256:d27dd1780b265406782578ae55b5ff885b94765a36b4df43cdaa4a8592eba2db   "/usr/bin/kube-con..."   2 hours ago         Up 2 hours                              k8s_calico-kube-controllers_calico-kube-controllers-546d44f5b7-s64kv_calico-system_a385c751-fd01-4e1e-bbd1-aebdd68bdcc2_0
391d3188bc24        bfe3a36ebd25                                                                                                "/coredns -conf /e..."   2 hours ago         Up 2 hours                              k8s_coredns_coredns-74ff55c5b-htf9k_kube-system_940dbb17-1fc3-4fec-b5c8-c3f15d687ecd_0
51a63ebe21db        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_coredns-74ff55c5b-htf9k_kube-system_940dbb17-1fc3-4fec-b5c8-c3f15d687ecd_11
13bdcfb90a7d        bfe3a36ebd25                                                                                                "/coredns -conf /e..."   2 hours ago         Up 2 hours                              k8s_coredns_coredns-74ff55c5b-l994x_kube-system_34b7739a-a9ad-4010-884e-ac38750e2522_0
8f437edba08d        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-kube-controllers-546d44f5b7-s64kv_calico-system_a385c751-fd01-4e1e-bbd1-aebdd68bdcc2_17
f1acab703595        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_coredns-74ff55c5b-l994x_kube-system_34b7739a-a9ad-4010-884e-ac38750e2522_11
f5bb9a12f192        docker.io/calico/node@sha256:25e0b0495c0df3a7a06b6f9e92203c53e5b56c143ac1c885885ee84bf86285ff               "start_runit"            2 hours ago         Up 2 hours                              k8s_calico-node_calico-node-x6524_calico-system_96a23faf-253e-4653-a3a2-5840123098ee_0
167f8ccd2b55        docker.io/calico/typha@sha256:bdcbaff0c42c392f4c03d45be1ab645ac74a68f7cf5886a5f37f105131122d6c              "/sbin/tini -- cal..."   2 hours ago         Up 2 hours                              k8s_calico-typha_calico-typha-74ff4c5f45-xt59h_calico-system_d7a0f635-d693-4433-abb4-a39dda5c3e89_0
ed4efb7ac900        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-node-x6524_calico-system_96a23faf-253e-4653-a3a2-5840123098ee_0
504537bae83d        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-typha-74ff4c5f45-xt59h_calico-system_d7a0f635-d693-4433-abb4-a39dda5c3e89_0
1c415c9c0b46        quay.io/tigera/operator@sha256:6e7d248a30c34204e6df445f03d61b7855bd9f188181b2abf68972da97aebde4             "operator"               2 hours ago         Up 2 hours                              k8s_tigera-operator_tigera-operator-657cc89589-gw4hh_tigera-operator_7c1e4999-db4a-4326-b640-37f109aeb6c3_0
03edcb5c56fb        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_tigera-operator-657cc89589-gw4hh_tigera-operator_7c1e4999-db4a-4326-b640-37f109aeb6c3_0
5951e5f0ed01        e3f6fcd87756                                                                                                "/usr/local/bin/ku..."   2 hours ago         Up 2 hours                              k8s_kube-proxy_kube-proxy-vzqzp_kube-system_d2cc50ae-9f7a-4664-a571-86179f80e824_0
6e83edae8760        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-proxy-vzqzp_kube-system_d2cc50ae-9f7a-4664-a571-86179f80e824_0
1598dca2014d        2893d78e47dc                                                                                                "kube-controller-m..."   2 hours ago         Up 2 hours                              k8s_kube-controller-manager_kube-controller-manager-control_kube-system_2311dbc31e75733b5aebc132ee6a9d35_0
d99c8244465e        4aa0b4397bbb                                                                                                "kube-scheduler --..."   2 hours ago         Up 2 hours                              k8s_kube-scheduler_kube-scheduler-master_kube-system_9be8cb4627e7e5ad4c3f8acabd4b49b3_0
7f67ddcc268b        75c7f7112080                                                                                                "kube-apiserver --..."   2 hours ago         Up 2 hours                              k8s_kube-apiserver_kube-apiserver-master_kube-system_20b2b09ca80c741783eb6b83a552ac7c_0
0c06b7960d03        0369cf4303ff                                                                                                "etcd --advertise-..."   2 hours ago         Up 2 hours                              k8s_etcd_etcd-master_kube-system_bb0410fa2ef0ff53783684f6b2d5ea4e_0
435cebe0be64        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-scheduler-master_kube-system_9be8cb4627e7e5ad4c3f8acabd4b49b3_0
8fff7d82041a        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-controller-manager-master_kube-system_2311dbc31e75733b5aebc132ee6a9d35_0
d0b000721987        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-apiserver-master_kube-system_20b2b09ca80c741783eb6b83a552ac7c_0
fd075b063287        k8s.gcr.io/pause:3.2                                                                                        "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_etcd-master_kube-system_bb0410fa2ef0ff53783684f6b2d5ea4e_0
[root@master ~]# 

 

5.2 워커 노드

워커 노드 역시 ip a 명령어를 통하여 calico에 의해 생성된 vxlan.calico 가상 네트워크를 확인할 수 있으며, docker ps 를 통해 calico 관련 컨테이너가 실행중이라는 것을 확인할 수 있습니다.

[root@worker1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:bc:b5:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.204/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::95b5:132c:62a:402c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:2f:5a:c2:c1 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
4: vxlan.calico: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 66:3c:05:84:20:98 brd ff:ff:ff:ff:ff:ff
    inet 192.165.235.128/32 scope global vxlan.calico
       valid_lft forever preferred_lft forever
    inet6 fe80::643c:5ff:fe84:2098/64 scope link 
       valid_lft forever preferred_lft forever
[root@worker1 ~]# 

[root@worker1 ~]# docker ps
CONTAINER ID        IMAGE                                                                                            COMMAND                  CREATED             STATUS              PORTS               NAMES
908f59e24fd7        docker.io/calico/typha@sha256:bdcbaff0c42c392f4c03d45be1ab645ac74a68f7cf5886a5f37f105131122d6c   "/sbin/tini -- cal..."   2 hours ago         Up 2 hours                              k8s_calico-typha_calico-typha-74ff4c5f45-48xmj_calico-system_eb0392b0-fe9f-4ffb-aab0-c96b32b24758_0
d7f7baf156c9        k8s.gcr.io/pause:3.2                                                                             "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-typha-74ff4c5f45-48xmj_calico-system_eb0392b0-fe9f-4ffb-aab0-c96b32b24758_0
7d777d60b599        docker.io/calico/node@sha256:25e0b0495c0df3a7a06b6f9e92203c53e5b56c143ac1c885885ee84bf86285ff    "start_runit"            2 hours ago         Up 2 hours                              k8s_calico-node_calico-node-cc42m_calico-system_6ec9b0df-5e6e-4efc-9c13-286b3b159835_0
ed48b5ef5654        k8s.gcr.io/kube-proxy@sha256:523eee56f556bd9bac7ab068447dc6c78b3f52cdd92f60340bc0f7e83a1cf6c9    "/usr/local/bin/ku..."   2 hours ago         Up 2 hours                              k8s_kube-proxy_kube-proxy-v8gqp_kube-system_fa3d23ee-a29a-4df9-b797-811d4acace56_0
88d80270e0b4        k8s.gcr.io/pause:3.2                                                                             "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_calico-node-cc42m_calico-system_6ec9b0df-5e6e-4efc-9c13-286b3b159835_0
59dff68f5c9b        k8s.gcr.io/pause:3.2                                                                             "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-proxy-v8gqp_kube-system_fa3d23ee-a29a-4df9-b797-811d4acace56_0
[root@worker1 ~]# 

 

참조 문서

 

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

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
https://docs.projectcalico.org/getting-started/kubernetes/quickstart

https://docs.projectcalico.org/getting-started/clis/calicoctl/install

https://www.linuxtechi.com/install-kubernetes-k8s-on-ubuntu-20-04/?fbclid=IwAR1lTUdecScnPk-0vuLUzy0HOIj5p6vIfL4ljuk-3M9_MWjlusBFEP6TR2U



이렇게해서 RHEL7에 쿠버네티스를 설치해 보았습니다. 시작하기 전에는 어려울것만 같았던 쿠버네티스도 하나씩 하나씩 공부하다보니, 이제 아키텍처도 이해가 가기 시작했고, 생소하기만 해던 용어들도 귀에 익어가기 시작했습니다. 물론 오픈스택에서 다루던 가상네트워크와는 다르지만, 어쩌면 미리 컨테이너 관련 지식을 알았기 때문에 조금은 더 쉽게 접근할 수 있지 않았나 하는 생각이 드는것 같습니다. 이제 쿠버네티스를 어떻게 사용하고, 쿠버네티스를 이용하여 어떤것들을 할 수 있는지를 공부해야 겠습니다.