Kubernetes ์ค์น
์ด์ฑ๋ฏธ๊ฐ์ฌ ์ค์ต์์ ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ์ค์นํ๊ธฐ ์ฐธ๊ณ
๐
Virtual Box ์ธํ
ํ์ผ > ํ๊ฒฝ์ค์ > ๋คํธ์ํฌ > k8sNetwork ์์ฑ
hostIP Port virtualMachine : port(sshd)
host 127.0.0.1 101 ----> node1 10.100.101.22
host 127.0.0.1 102 ----> node2 10.100.102.22
host 127.0.0.1 104 ----> master 10.100.104.22
โ
๋์ปค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ ์ค์น๊ฐ ๋์ด์์ด์ผ ํ๋ค.
๋์ปค ์ค์ต์ ์์ฑํ ubuntu 20.04 ๋ฒ์ vm์ ๋ณต์ ํด์ master, node1, node2 ๋ง๋ค์
๋์ปค ์ค์ต์ ์์ฑํ ubuntu 20.04 ๋ฒ์ vm์ ๋ณต์ ํด์ master, node1, node2 ๋ง๋ค์
- ์ต์ : ๋ชจ๋ ๋คํธ์ํฌ ์ด๋ํฐ์ ์ MAC์ฃผ์ ์์ฑ, ์์ ํ ๋ณต์
๋ณต์ ํ ๋คํธ์ํฌ๋ฅผ k8sNetwork๋ก ์ธํ
ํ๊ณ
master๋ 2cpu 3072๋ฉ๋ชจ๋ฆฌ, node1 2 ๋ 2cpu 2048๋ฉ๋ชจ๋ฆฌ
๊ตฌ๋!
root๋ก ๋ก๊ทธ์ธ ํ
# hosts ์ธํ
vi /etc/hosts ๋ก ์๋ ์
๋ ฅ ํน์ ์์
10.100.0.104 master.example.com master
10.100.0.101 node1.example.com node1
10.100.0.102 node2.example.com node2
# hostname ์ธํ
vi /etc/hostname ๋ก ์๋ ์
๋ ฅ ํน์ ์์
master.example.com ํน์ node1.example.com์ผ๋ก ๋ง๋ ๋
ธ๋ํํ๋ก ์์
# ๊ทธ๋ํฝ๋ชจ๋๋ก ์ฌ๊ธฐ๋(๋คํธ์ํฌ ์ค์ ์ ํธํ๊ฒ ํ๊ธฐ ์ํด)
systemctl isolate graphical.target
๊ทธ๋ํฝ ๋ชจ๋๋ก ๊ตฌ๋ ํ, guru๋ก ๋ก๊ทธ์ธ
- ์ฐ๋ถํฌ ์ฌ์ฉ์ํ๋ฉด์์ ์ค๋ฅธ์ชฝ ์๋จ ์ค์ > ๋คํธ์ํฌ > ์ค์ > IPv4์์ IP์์
- ๋คํธ์ํฌ ์ ์ ํ ๊ธ ๋์ํด์ ๊ฐฑ์ ์์ผ์ค
๋ค์ ์ฝ์๋ชจ๋๋ก ์ธํ
ํ ์ฌ๊ธฐ๋
# root ๋ก
$systemctl isolate multi-user.target
Kubernetes ์ด๊ธฐ ์ค์
์ค์น์ ์ฌ์ฉํ๋ ๋ช ๋ น์ root์์ ์คํํ๋ค
๐
- Installing kubeadm, kubelet, kubectl
(kubeadm) ์ฟ ๋ฒ๋คํฐ์ค ์ ์ฒด๋ฅผ ๊ด๋ฆฌํด์ฃผ๊ณ ์ด์ํด์ฃผ๋ ์ปค๋งจ๋
(kubelet) ์ฟ ๋ฒ๋คํฐ์ค ์ปจํ ์ด๋๋ฅผ ์กฐ์ํด์ฃผ๋ ๋ฐ๋ชฌ
(kubectl) ์ฟ ๋ฒ๋คํฐ์ค์ ๋ช ๋ น์ด(ex. ํ๋์กฐํ, ์น์๋ฒ 3๊ฐ ์คํ ๋ฑ๋ฑ)๋ฅผ ์ํดํ ๋ ์ฌ์ฉํ๋ ์ ํธ- swap disable ์ฒ๋ฆฌ (๋ง์คํฐ/๋ ธ๋)
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
- ๋ ธ๋๊ฐ ํต์ ์ ์ํ ๋ธ๋ฆฟ์ง ์ค์ (๋ง์คํฐ/๋ ธ๋)
cat <<EOF > /etc/modules-load.d/k8s.conf overlay br_netfilter EOF #๋ชจ๋ ์ ์ฌ modprobe overlay modprobe br_netfilter cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF #Apply sysctl params without reboot sysctl --system
- ๋ฐฉํ๋ฒฝ์ ๊ฑฐ (๋ง์คํฐ/๋ ธ๋)
#๋ฐฉํ๋ฒฝ ๋ฐ๋ชฌ ์ธํ ์๋์ด์๋ค๋ฉด ๋ฌด์ systemctl stop firewalld systemctl disable firewalld
- ํ์ ํจํค์ง apt-get (๋ง์คํฐ/๋ ธ๋)
apt-get update apt-get install -y apt-transport-https ca-certificates curl
- ๊ตฌ๊ธ ํด๋ผ์ฐ๋ ํผ๋ธ๋ฆญ ํค ๋ค์ด๋ก๋ (๋ง์คํฐ/๋ ธ๋)
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
- ๋ ํ์งํ ๋ฆฌ ์ ๋ฐ์ดํธ ํ kubelet kubeadm kubectl ์ค์น (๋ง์คํฐ/๋ ธ๋)
apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl
- ํ๋ธ๋ ์คํ ๋ฐ ์ธ์์ด๋ธ (๋ง์คํฐ/๋ ธ๋)
systemctl start kubelet systemctl enable kubelet
- systemd์ cgroup ๋ง์ถฐ ์ค์ผํจ (๋ง์คํฐ/๋ ธ๋)
#Kubernetes 1.22๋ฒ์ ๋ถํฐ๋ systemd์ cgroup ๋ง์ถฐ ์ค์ผํจ mkdir /etc/docker cat <<EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF systemctl enable docker systemctl daemon-reload systemctl restart docker
- master component ์ด๊ธฐํ (๐ก๋ฐ๋์ master์์ ์คํโผ๏ธ)
kubeadm init
# ํน์ kubeadm init --apiserver-advertise-address 10.100.0.104 --pod-network-cidr=10.100.0.0/24
๐ฟ๐ข ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด
https://musclebear.tistory.com/165 ์์ ์๋ฌ ์ฆ์ ํด๊ฒฐ ์ฐธ๊ณ
[init] Using Kubernetes version: v1.25.4
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: E1124 13:32:42.667699 9266 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2022-11-24T13:32:42+09:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
- token๊ฐ ์ ์ฅ (๋ง์คํฐ์์ ์ ์ฅํ ๋
ธ๋์์ ์ฌ์ฉ)
kubeadm ์ค์น์๋ฃ ํ ํ๋ฉด์ ์๋ kubeadm token๊ฐ์ token.txt๋ก ์์์ ์ฅ
(ํ node์์ ์ฌ์ฉํด์ผ ํจ)
- kubectl ์ฌ์ฉ ๊ถํ ์ค์ (๋ง์คํฐ/๋
ธ๋)
#root ๊ถํ ์ ์ ์๊ฒ ์ค์ mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config #guru ์ ์ ์๊ฒ๋ kubectl๊ถํ ์ค์ ํ๋ ค๋ฉด, guru ๋ก๊ทธ์ธ ์ํ๋ก ์คํ su - guru mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Installing a Pod network add-on (๋ง์คํฐ)
(Weave Net ์ผ๋ก ์ค์นํด๋ณธ๋ค)
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
- node ๋์ํ์ธ (๋ง์คํฐ)
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.example.com Ready control-plane 57m v1.25.4
- ์์ปค๋
ธ๋๋ค ์กฐ์ธ ( โผ๏ธnode1, node2์์ ์คํ)
master์ ์ ์ฅํด๋๋ kubeadm token๊ฐ์ node์์ ์คํ
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.example.com Ready control-plane 57m v1.25.4
๐ฟ๐ข ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: E1124 14:46:10.087714 11613 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2022-11-24T14:46:10+09:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
rm /etc/containerd/config.toml
systemctl restart containerd
#์ดํ ๋ค์ ๋
ธ๋์ฐ๊ฒฐ ์ฌ์๋
- node ๋์ํ์ธ (๋ง์คํฐ)
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master.example.com Ready control-plane 72m v1.25.4
node1.example.com Ready <none> 7m45s v1.25.4
node2.example.com Ready <none> 65s v1.25.4
- kubectl, kubeadm ์๋์์ฑ ๋ช ๋ น์ด ์ค์ ํ๊ธฐ(๋ง์คํฐ)
#kubectl ๋ช
๋ น์ด ์๋์์ฑ ์ค์
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >>~/.bashrc
#kubeadm ์๋์์ฑ ๋ช
๋ น์ด ์ค์
source /usr/share/bash-completion/bash_completion
echo 'source <(kubeadm completion bash)' >>~/.bashrc