kubeadm, kubectl, kubelet 설치
- br_netfilter 설정
sudo modprobe br_netfilter ##br_netfilter 활성화
lsmod | grep br_netfilter ##br_netfilter 확인
- iptable 설정
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
- swap 모드 끄기
sudo swapoff -a
- countainer runtime 설치(docker)
sudo apt install docker.io
- kubeadm, kubelet, kubectl 설치
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Single Cluster 설정
- Initialize control plane
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
### kubeadm init이 끝난 후
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Flannel(Pod network add-on) 설치
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 만약 network add-on이 제대로 설치가 안됐을 경우
kubelet에서 default cgroup driver로 systemd를 사용하고 있지만 docker에서는 cgroupfs인 경우가 있다. 이는 kubelet과 docker 버전에 따라 상이하다. 어떤 cgroup driver를 써도 크게 상관없지만, 저 둘의 cgroup driver를 일치시켜줘야 한다. 아래는 docker를 systemd로 변경하고 있다.
sudo docker info | grep -i cgroup ## docker cgroup driver 확인
sudo vi /usr/lib/systemd/system/docker.service
## "ExecStart"로 시작하는 라인을 찾은 후에 아래 문구로 변경
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
###
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep -i cgroup ## systemd로 바뀌어 있을 것
### 다시 kubeadm init부터 진행하면 성공될 것이다.
- Control plane node isolation
kubectl taint nodes --all node-role.kubernetes.io/master-
이제 control plane에서도 pod를 스케쥴링할 수 있게 된다.
kubectl get nodes
=> The connection to the server :6443 was refused - did you specify thi right host or port?
sudo swapoff -a
strace -eopenat kubectl version