kubeadm 으로 kubernetes 를 구성 합니다.
테스트 장비는 vm / ubuntu 20.04 로 테스트 하였습니다.
master , node 와 모든 설치 과정이 동일하며, kubeadm init 의 경우 master 에서 실행 하며,
node 에서는 kubeadm join 을 하여 kubernetes 클러스터에 추가 합니다.hostname 설정
$ sudo vi /etc/hosts
192.168.0.10 k8s-master
192.168.0.11 k8s-node01
192.168.0.12 k8s-node02
swap disable
$ sudo vi /etc/fstab
#/swap.img none swap sw 0 0
$ sudo swapoff -a
system upgrade 및 system rebooting
$ sudo apt update
$ sudo apt list --upgradable
$ sudo apt upgrade -y
$ sudo init 6
기본 설치 docker remove
$ sudo apt-get remove docker docker-engine docker.io containerd runc
docker 설치
# add gpg key
$ 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
# docker 설치
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
$ sudo apt install -y nfs-common
$ sudo systemctl enable docker.service --now
$ sudo usermod -aG docker ubuntu
kernel-parameter 설정
$ sudo cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
$ sudo sysctl --system
docker 디렉토리 생성 및 cgroup driver 변경
$ sudo vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker info | grep -i cgroup
kubelet , kubeadm , kubectl 설치
$ sudo apt-get install -y apt-transport-https ca-certificates curl
# google cloud public 키 등록및 apt repository 설정
# kubelet , kubeadm , kubectl 설치 및 update 중지
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && \
sudo apt-get update -q && \
sudo apt-get install -qy kubelet=1.21.14-00 kubeadm=1.21.14-00 kubectl=1.21.14-00
$ sudo apt-mark hold kubelet kubeadm kubectl
master 에서 kubeadm init 명령어 실행
$ sudo kubeadm init --apiserver-advertise-address=192.168.0.10 --pod-network-cidr=192.168.0.0/16 --cri-socket=/var/run/dockershim.sock
~
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.10:6443 --token lnyrpq.sjgabz4x6mqsbj6j \
--discovery-token-ca-cert-hash sha256:0abfc94648b8ef71befa09f188f21349c69db533f5df71c8a880ecaf149a4f92
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
모든 명령어는 master 또는 bastion-host 에서 실행 합니다.
문서의 테스트 환경은 별도의 bastion-host 가 없으니 master 에서 실행 합니다.
calico cni 설치
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
pod 정보 확인
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-69f595f8f8-pq2kn 1/1 Running 0 98s
kube-system calico-node-qnhq8 1/1 Running 0 98s
kube-system coredns-558bd4d5db-89vxr 1/1 Running 0 5m37s
kube-system coredns-558bd4d5db-kvxn9 1/1 Running 0 5m37s
kube-system etcd-k8s-master 1/1 Running 0 5m43s
kube-system kube-apiserver-k8s-master 1/1 Running 0 5m45s
kube-system kube-controller-manager-k8s-master 1/1 Running 0 5m44s
kube-system kube-proxy-h7qfr 1/1 Running 0 5m37s
kube-system kube-scheduler-k8s-master 1/1 Running 0 5m43s
node join
node01 , node02 에서 실행 합니다.
$ sudo kubeadm join 192.168.0.10:6443 --token lnyrpq.sjgabz4x6mqsbj6j \
--discovery-token-ca-cert-hash sha256:0abfc94648b8ef71befa09f188f21349c69db533f5df71c8a880ecaf149a4f92
master 에서 kubernetes node 를 확인 합니다.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 4m40s v1.21.14
k8s-node01 Ready <none> 4m7s v1.21.14
k8s-node02 Ready <none> 3m56s v1.21.14
kubectl 자동완성
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ vi .bashrc
alias l='ls -CF'
alias k='kubectl'
$ source .bashrc
만약 node 추가 중 오류가 발생 하여 추가가 안된다면 kubeadm reset 을 진행 합니다.
$ sudo kubeadm reset
Comments