본문 바로가기
망각을위한노트

Deploy kubernetes on Oracle Linux 8 Ampere instance(aarch64) with kubeadm

by RNE21 2022. 7. 7.
반응형

Deploy kubernetes on Oracle Linux 8 Ampere instance(aarch64) with kubeadm

오라클 클라우드에 kubeadm을 실행해서, kubernetes 설치하는 방법에 관한 글이다.
반드시 오라클 클라우드일 필요는 없으며,
oracle linux 8 버전이면 어디든 상관없다.

오라클 클라우드의 aarch64 아키텍처 사용자들에게 도움이 되기를..


1. 사전 작업

1.1 podman이나 runc가 설치되어 있다면, 삭제한다.

dnf remove runc podman

1.2 swap off 명령어 실행하기.

swapoff -a

1.3 /etc/fstab 파일을 연 다음, swap 부분에 주석처리 할 것.


2. Access allow

2.1 add kubernetes tcp ports

firewall-cmd --zone=public --permanent --add-port={6443,2379,2380,10250,10251,10252}/tcp

2.2 allow your Host access

firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address={your IP or net address/CIDR} accept'

firewall-cmd --reload

2.3 add yum repository

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

dnf update

2.4 install container runtime

dnf install docker-ce docker-ce-cli containerd.io

2.5 enable docker service

systemctl enable docker --now

2.6 replace Docker daemon's cgroup driver to systemd

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

2.7 verify Docker installation status

docker version

3. install k8s

3.1 setup master node.

3.1 install k8s packages

dnf install -y kubeadm kubectl kubelet

3.2 pull images

kubeadm config images pull

3.3 setup master node with 'kubeadm init' command

kubeadm init을 실행하면 되는데,
필요하면 --apiserver-advertise-address 또는
--control-plane-endpoint 옵션 추가하고.

예를 들어, CNI 플러그인으로 Flannel을 사용할 거라면,
옵션 --pod-network-cidr=10.244.0.0/16 추가하고. 아래와 같이 실행.

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=k8s마스터의IP주소

만약 Flannel대신, calico 사용 할 거라면, 아래 명령을 실행.

kubeadm init --apiserver-advertise-address={k8s마스터의IP주소}

여기서, {k8s마스터의 IP주소}는 private ip 이어야 한다.
socker bind는 원래, 자기 자신이 보유하고 있는 ip에 대해서만 bind가 가능하다.
oracle cloud에서 공인 IP를 부여해 주긴 하지만, 그 공인 IP를 사용해서 socket bind 할 수가 없음.
따라서, {k8s마스터의 IP주소}는 private ip 이어야 한다.

(만약 공인 IP 사용하면, kubelet이 계속 에러를 뱉어 낼 것임)


3.4 change network settings for CNI

load br_netfilter module 설정하기

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

4. 네트워크 플러그인 요구사항 - iptables가 브리지 된 트래픽 볼 수 있게 하기

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

4.1 install CNI plug-in module

원하는 대로 Flannel이나 calico 설치하면 됨.
나는 주로 calico를 사용함.

아래에 calico 설치하는 법을 적어둠.

먼저, 방화벽 open

firewall-cmd --add-port=179/tcp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --add-port=5473/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --add-port=2379/tcp --permanent
firewall-cmd --reload

4.2 calico 설치

calico yaml file download

curl https://docs.projectcalico.org/manifests/calico.yaml -O --insecure

calico 설치 명령어

kubectl apply -f calico.yaml

calico-kube-controllers를 위한 taint 설정

calico 설치하고 나면, calico-kube-controllers 가 Pending 상태인 것을 볼 수 있다.

[root@master ~]# kubectl get pods -n kube-system -o wide

Output:

NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
calico-kube-controllers-6766647d54-l8rkx   0/1     Pending   0          9m4s   <none>           <none>   <none>           <none>

해결하려면, 다음 명령을 실행해 준다.

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

5. Add worker node

5.1 add inbound firewall rules

firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp

5.2 kubeadm join

kubeadm init 마지막 과정에 출력되는 command를 복사해서,
worker node에서 실행한다.

kubeadm join k8s마스터IP주소:6443 --token 토큰 \
    --discovery-token-ca-cert-hash sha256:해쉬값

5.3 Error 발생 시

[ERROR CRI]: container runtime is not running

vi /etc/containerd/config.toml

disabled_plugins = ["CRI"] 를 찾아서
disabled_plugins = [] 로 변경

EOF

반응형