본문 바로가기

kubernetes, helm, rancher

kubernetes setting in ubuntu

1. Docker install

  • Old Docker Remove
sudo apt-get remove docker docker-engine docker.io containerd runc
  • Set up the repository
$ sudo apt-get update

$ sudo apt-get install -y\
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ 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
  • Install Docker Engine
$ sudo apt-get update
$ apt-cache madison docker-ce # 여러 VERSION이 나오면 SPECIFIC <VERSION_STRING> 고름.
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
# specific version 설치하지 않고 알아서 설치할 경우
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  • Verify Docker
$ sudo docker run hello-world

2. kubeadm, kubectl, kubelet install

  • Swap disabled. You MUST disable swap in order for the kubelet to work properly. <- in kubernetes documents
$ swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab​  or   sudo swapoff -a
  • Node's iptables가 bridged traffic을 바라보기 위한 config작업. 

 

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

 

  • 방화벽 체크. 방화벽은 kubernetes에서 잘 사용안하므로 systemctl [stop | disable] firewalld

 

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

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

# 한꺼번에 하면 안되므로 한줄씩

 

  • kubelet start

 

sudo systemctl start kubelet
sudo systemctl enable kubelet

 

  • kubeadm init (!! control plane을 init하는 것이기 때문에 master node에서만)

 

sudo kubeadm init

 

  • 다음과 같이 나오면 다음 명령어를 실행시키고, token(node가 master에 join하기 위해)을 저장한다.

 

# 사용자 설정해주기 위해
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

  • admin.conf 파일은 kubeadm init 명령어를 수행했을 때 생성됩니다. 즉, master 노드에서만 kubectl 명령어를 사용할 수 있으며, 다른 노드에서 kubectl 명령어를 사용하고 싶을 때는 master 노드에서 생성한 admin.conf 파일을 복사해오면 일반 노드에서도 kubectl 명령어를 사용할 수 있습니다
  • 하지만 다음과 같이 NetReady 상태인데 이유는 CNI(Container Network Interface)가 설치가 아직 안되어있기 때문.    
  • CNI 설치. (Weavnet)

 

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"​

 

  • 그러면 Ready라고 나올 것이다.
  • Worker node join (위에서 나온 명령어를 node에 그대로 실행)
sudo kubeadm join 192.168.118.129:6443 --token u888qc.vxke81zakgm7wu39 \
--discovery-token-ca-cert-hash sha256:d12596be2c1208e2d79ac1cb4d075a73955517d9ca4c13c716d42d36665024cd
  • kubernetes 명령어 자동완성
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc