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
'망각을위한노트' 카테고리의 다른 글
개인정보보호법, CCTV 줌 기능, 회전기능 가능한가? (0) | 2022.08.19 |
---|---|
개인정보보호법, 왜 가명정보가 개인정보에 포함되는가? (0) | 2022.08.19 |
MSA 구조에서 Istio 기능, 역할 (0) | 2022.05.02 |
A father said to his daughter : (0) | 2020.10.29 |
Cocoa, NeXTSTEP (0) | 2020.08.17 |