RockyLinux(CentOS 8) 에서 Kubernetes 설치하기

By | 2022년 12월 28일
Table of Content

RockyLinux(CentOS 8) 에서 Kubernetes 설치하기

참조

참조

참조

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

사전 준비

모든 master/worker node 에 아래 내용이 반영되어 있어야 합니다.

  • sudo 계정생성
  • 2G 이상의 메모리
  • 2 CPU core 이상
  • 방화벽 off, 보안그룹 설정(AWS인 경우)
  • Swap off (필수)

sudo 계정생성

useradd -d /home/username username
echo "password" | passwd username --stdin

chmod 700 /usr/bin/su

sed -ie '/wheel/s/$/\:username/' /etc/group

방화벽 off

개발서버라면 아래의 방법으로 방화벽을 disable 해주면 된다.

sudo systemctl stop firewalld && sudo systemctl disable firewalld

sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

운영서버라면 아래에서 설명하는 방식으로 필요한 포트만 오픈해 준다.

Swap off

sudo swapoff -a
sudo sed -i -e '/swap/d' /etc/fstab

hosts 파일 수정(옵션)

vi /etc/hosts
---------------------------
172.16.0.101    node-01
172.16.0.102    node-02
172.16.0.103    node-03
172.16.0.104    node-04
172.16.0.105    node-05
---------------------------

Docker, containerd 설치 (모든 master, worker node)

Docker 설치

RockyLinux 는 통상적인 CentOS 방식으로 설치가 되지 않고 아래 방식을 설치해야 한다.

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf update

# 충돌나는 패키지를 교체한다.(ex, podman)
sudo dnf install -y docker-ce docker-ce-cli containerd.io --allowerasing

docker --version

sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

sudo usermod -aG docker 계정아이디
id 계정아이디
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

containerd 설치

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

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

sudo sysctl --system
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=0
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

sudo dnf -y install kubelet kubeadm kubectl --disableexcludes=kubernetes epel-release
sudo systemctl enable --now kubelet
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo vi /etc/containerd/config.toml
---------------------------
......
        [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime.options]
          SystemdCgroup = true
......
---------------------------
sudo systemctl enable containerd
sudo systemctl restart containerd

Kubernetes 설치

방화벽 오픈

운영서버라면 아래의 방식으로 마스터/워커 노드의 방화벽을 오픈해 준다.

마스터

sudo firewall-cmd --add-port={80,443,6443,2379,2380,10250,10251,10252,30000-32767}/tcp --permanent
sudo firewall-cmd --reload

워커

sudo firewall-cmd --add-port={80,443,10250,30000-32767}/tcp --permanent
sudo firewall-cmd --reload

haproxy 설치(옵션)

1 번 서버에 haproxy 를 설치하고 16443 포트로 들어오는 요청을 1/2/3 번 서버로 분산시켜 줄 수 있다.

sudo dnf -y install haproxy
sudo vi /etc/haproxy/haproxy.cfg
---------------------------
frontend kubernetes-master-lb
        bind 0.0.0.0:16443
        option tcplog
        mode tcp
        default_backend kubernetes-master-nodes

backend kubernetes-master-nodes
        mode tcp
        balance roundrobin
        option tcp-check
        option tcplog
        server node1 node-01:6443 check
        server node2 node-02:6443 check
        server node3 node-03:6443 check
---------------------------
sudo firewall-cmd --add-port={80,443,6443,2379,2380,10250,10251,10252,16443,30000-32767}/tcp --permanent
sudo firewall-cmd --reload
sudo systemctl enable haproxy
sudo systemctl restart haproxy

master node 설치

위 명령을 root 로 실행해서 마스터 노드를 추가할 수 있다.
아래 명령을 root 로 실행해서 워커 노드를 추가할 수 있다.

calico network 플러그인을 쓰기 때문에 192.168.0.0/16 는 고정값으로 설정해야 한다.
10.0.0.10 는 마스터 서버 접속 아이피이다.

# --apiserver-advertise-address=172.16.0.101 \
sudo kubeadm init \
    --control-plane-endpoint "node-01:16443" \
    --pod-network-cidr=192.168.0.0/16 \
    --upload-certs
You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join node-01:16443 --token qelzz0.dq8fp6bmq3t8ns31 \
        --discovery-token-ca-cert-hash sha256:160c9543e023b599d6cb624e15dXXXXXXXXXXXXXXXXXXX \
        --control-plane --certificate-key ec722f6286381b4b91f2f8022854XXXXXXXXXXXXX

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join node-01:16443 --token qelzz0.dq8fpXXXXXXXXXXX \
        --discovery-token-ca-cert-hash sha256:160c9543e023b599d6cb624XXXXXXXXXXXX
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

vi calico.yaml
---------------------------
            - name: CALICO_IPV4POOL_CIDR
              value: "192.168.0.0/16
---------------------------

kubectl apply -f calico.yaml

kubectl get pods -o wide -A

# calico-kube-controllers 가 Pending 상태이면 아래명령을 수행하자.
sudo systemctl restart containerd

아래 명령을 이용해 추가 마스터 노드를 추가할 수 있다.

sudo kubeadm join node-01:16443 --token qelzz0.dq8fp6bmq3t8ns31 \
        --discovery-token-ca-cert-hash sha256:160c9543e023b599d6cb624e15dXXXXXXXXXXXXXXXXXXX \
        --control-plane --certificate-key ec722f6286381b4b91f2f8022854XXXXXXXXXXXXX

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

kubectl get nodes

# kubectl get nodes 가 Pending 상태이면 아래명령을 수행하자.
sudo systemctl restart containerd

마스터 노드에도 Pod 를 생성한다면 아래명령을 수행해 준다.

# kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

worker node 설치

아래 명령을 이용해 워커 노드를 추가할 수 있다.

sudo kubeadm join node-01:16443 --token qelzz0.dq8fpXXXXXXXXXXX \
        --discovery-token-ca-cert-hash sha256:160c9543e023b599d6cb624XXXXXXXXXXXX

# kubectl get nodes 가 Pending 상태이면 아래명령을 수행하자.
sudo systemctl restart containerd

trouble shoot

토큰 재발급

토큰이 만료되면 아래 명령을 이용해 토큰을 재발급 받을 수 있다.

kubeadm token list
kubeadm token delete 토큰이름
kubeadm token create --print-join-command

다시 설치

sudo systemctl stop kubelet
sudo kubeadm reset

sudo rm -rf /etc/cni/net.d
sudo rm -rf $HOME/.kube/

One thought on “RockyLinux(CentOS 8) 에서 Kubernetes 설치하기

답글 남기기