태그 보관물: CentOS

The procedure to install Kubernetes on Rocky Linux (or CentOS).

1. time sync 및 firewalld 서비스 중지

# firewalld 서비스 중지
sudo systemctl stop firewalld

# firewalld 서비스 자동 실행 중지
sudo systemctl disable firewalld

# 표준 시간대 설정 (서울)
sudo timedatectl set-timezone Asia/Seoul

# chrony 설치 및 NTP 동기화 활성화
sudo dnf install -y chrony
sudo systemctl enable --now chronyd

# 동기화 상태 확인
chronyc tracking
chronyc sources -v

2. swap 기능 비활성화

# swap 끄기
sudo swapoff -a

# swap 자동 마운트 끄기
sudo vi /etc/fstab
# /swap 라인 주석 처리

3. containerd(docker) 설치

# 패키지 업데이트
sudo yum update -y
# 필수 패키지 설치
sudo yum install -y yum-utils iproute-tc
# docker 저장소 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# containerd 설치
sudo yum install containerd.io.x86_64 -y 
# containerd 자동 시작하도록 설정
sudo systemctl enable --now containerd
# containerd 설정 파일 생성
sudo bash -c "containerd config default > /etc/containerd/config.toml"
# Cgroup을 Systemd를 통해 관리하도록 설정
sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml

4. 쿠버네티스 설치

# kubernetes 저장소 설정
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

참고링크 : install-kubeadm

# SELinux 를 permissive mode로 변경
# 즉시 변경 (재부팅시 적용 X)
sudo setenforce 0    

# 설정 파일 수정 (재부팅 후 적용)
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# kubelet kubeadm kubectl 설치
sudo yum install kubelet kubeadm kubectl --disableexcludes=kubernetes -y

# kubelet 자동 시작하도록 설정
sudo systemctl enable --now kubelet
# net.ipv4.ip_forward=1 로 설정
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

# bridge 모듈 로드
sudo modprobe br_netfilter

# net.bridge.bridge-nf-call-iptables = 1 로 설정
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.conf

# 변경 사항 적용
sudo sysctl -p
# containerd 재시작
sudo systemctl restart containerd

5. kubeadm init (master node)

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address 192.168.1.71

[조금 기다리다 보면 ....]
[앞부분 생략]
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.1.71:6443 --token fx8wwi.h1sg517qd62hft7e \
        --discovery-token-ca-cert-hash sha256:62133cfdf41b98d1f45d0a42a9f72af146b632c50c0bda7044461f7e41c1cc1c
# 인증 정보 복사 (위에서 제시한 가이드)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# calico 설치 (network cni 플러그인 중 하나)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/master/manifests/tigera-operator.yaml

# custom-resources.yaml 파일은 수정이 필요해서 다운로드 먼저
curl -O https://raw.githubusercontent.com/projectcalico/calico/master/manifests/custom-resources.yaml

# custom-resoures.yaml 편집
vi custom-resources.yaml     #cidr 정보를 변경 (-> 192.168.0.0/16) 설정 변경 필요 없으면 Pass

# 설치
kubectl apply -f custom-resources.yaml

참고링크 : calico 설치가이드

# /etc/resolve.conf 소프트 링크 (혹은 copy) (master node)
# 쿠버네티스 dns 질의 시 /run/systemd/resolve/resolv.conf 파일을 참조 함
sudo mkdir -p /run/systemd/resolve 
sudo ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf


# 설치 확인하기 
kubectl get pods -A

[STATUS : All Pending --> All Running]

  • 추후 worker를 추가할 경우 유효기간 경과(24시간)로 인해 token 발행 및 해쉬값 확인이 필요함.   worker 바로 연결 시에는 아래 단계 생략 하고 “5. kubeadm init (master node) 단계”에서 복사해둔 kubeadm join 문 사용.
# token 재발행 (Master node after 24 hours)
kubeadm token create
# token 해쉬값 확인하기 (Master node after 24 hours)
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
[token]
  • 6. kubeadm join (worker 노드)

    “5. kubeadm init (master node) 단계”에서 복사해둔 kubeadm join 문 사용.
# kubeadm join (worker 노드) (node 추가하기)
sudo kubeadm join 192.168.1.71:6443 --token fx8wwi.h1sg517qd62hft7e \
        --discovery-token-ca-cert-hash sha256:62133cfdf41b98d1f45d0a42a9f72af146b632c50c0bda7044461f7e41c1cc1c
# master 노드의 config 파일 복사 (worker 노드) 
mkdir -p $HOME/.kube

scp totoli@192.168.1.71:/home/totoli/.kube/config /home/totoli/.kube

sudo chown $(id -u):$(id -g) $HOME/.kube/config

7. /etc/hosts 편집

# /etc/hosts 추가  (모든 node)
sudo vi /etc/hosts
127.0.1.1 k8s-worker2
192.168.91.200 k8s-master
192.168.91.201 k8s-worker1
192.168.91.202 k8s-worker2

# master & workers node 연결 확인
kubectl get nodes