마스터노드 1개 (2core 이상 , ram 2gb이상)
워커노드 2개 (2core 이상 , ram 2gb이상)
Oracle cloud는 이중방화벽으로 클라우드 방화벽, OS 방화벽을 해제해줘야 설치 할 때 원활한 설치가 가능하다.
먼저 그림처럼 vcn->subnet->security list에서 모든 tcp port들을 허용해준다

이제 master node에서 os 방화벽 또한 해제해 준다. (Master)
sudo iptables -I INPUT -p tcp --dport 1:65535 -j ACCEPT
우분투 20.04에서는 iptables 명령어를 실행 후 재부팅이나 방화벽을 재 실행하면 저장이 되지 않는다. 그래서 방화벽 정책을 유지하기 위해 iptables-persistent 패키지를 설치하고 netfilter-persistent save 명령어로 보안 정책을 저장 해준다.
sudo apt-get install iptables-persistent
netfilter-persistent save
sudo ufw disable
cni로 weave net을 사용하기 때문에 아래 명령어 실행해준다
sudo ufw route allow in on weave out on weave
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
apt 패키지 업데이트
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
repo 추가
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo docker version
도커 설치
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl enable containerd
sudo systemctl start containerd
도커, containerd 실행
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
도커 로그 사이즈 지정
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
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
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/kubernetes-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
containerd 재시작 (containerd 오류 발생 방지를 위해서 재시작 해준다.)
sudo kubeadm init
kubeadm join ****:6443 --token 2736tk.xxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:d91452aa39bda95ea10758c2cxxxxxxxxxxxxxx
init 성공 시 위와 같은 토근이 발급됨 이 토큰을 통해 노드가 마스터 노드로 접근 가능
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ubuntu@master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 59s v1.27.2
위 명령어를 통해 sudo 없이 kubectl 사용 가능
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
ubuntu@master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 78s v1.27.2
설치 뒤 노드를 확인해 보면 Ready 상태로 바뀌어져 있음
ubuntu@master:~$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5d78c9869d-5gnrs 1/1 Running 0 70s
kube-system coredns-5d78c9869d-9wckv 1/1 Running 0 70s
kube-system etcd-master 1/1 Running 0 76s
kube-system kube-apiserver-master 1/1 Running 0 76s
kube-system kube-controller-manager-master 1/1 Running 0 76s
kube-system kube-proxy-74t8b 1/1 Running 0 70s
kube-system kube-scheduler-master 1/1 Running 0 76s
kube-system weave-net-h8tng 2/2 Running 1 (18s ago) 27s
마스터노드에 성공적으로 설치가 완료 된 것을 확인 가능하다.
init 전까지 똑같이 설치해 준 뒤
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
마찬가지로 containerd 오류 방지를 위해 containerd 재시작
sudo kubeadm join ****:6443 --token 2736tk.xxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:d91452aa39bda95ea10758c2cxxxxxxxxxxxxxx
발급 받은 토큰을 실행 한뒤 마스터 노드에서 확인해 보면
ubuntu@master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 15m v1.27.3
worker-1 Ready <none> 6m35s v1.27.3
worker-2 Ready <none> 32s v1.27.3
워커노드가 성공적으로 설정 된 것을 확인 할 수 있다.