Ubuntu 20.04 / kubernetes 설치 (OCI)

이건무·2023년 6월 14일

kubernetes

목록 보기
1/1

개발 환경 구성


노드 구성


마스터노드 1개 (2core 이상 , ram 2gb이상)
워커노드 2개 (2core 이상 , ram 2gb이상)

oracle cloud 방화벽 설정


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​

방화벽 off (Master, Worker)


sudo ufw disable

cni로 weave net을 사용하기 때문에 아래 명령어 실행해준다

sudo ufw route allow in on weave out on weave

swap off (Master, Worker)


sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

Docker 구성 (Master, Worker)


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

도커 로그 사이즈 지정

Kubernetes 설치(Mater, Worker)


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

control-plane설정(Master)


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 사용 가능

weave net 설치(Master)


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

마스터노드에 성공적으로 설치가 완료 된 것을 확인 가능하다.

Worker 노드 설정(Worker)


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

워커노드가 성공적으로 설정 된 것을 확인 할 수 있다.

0개의 댓글