CRI-containerd와 달리 CRI 플러그인은 직접 함수 호출을 통해 containerd와 상호 작용합니다.
사용자는 이제 containerd1.1과 함께 Kubernetes를 직접 사용할 수 있습니다.
전체 프로세스 요약
1. 상황에 맞게 물리 PC 또는 가상머신 준비. 2. 각 PC에 Container Runtime을 설치. 3. Container Runtime의 Config를 수정하는데, Network, SSH, DNS등등 Add-ons들을 설정하면 편하다. 4. 각 PC 또는 머신에 Kubernetes를 설치한다. 5. Master node가 생성한 Cluster join 명령어를 각 Worker nodes에서 실행한다. 6. 잘 작동하는지 확인한다.
ShimCgroup: shim 프로세스용 cgroup(containerd와 runc 간의 통신을 처리하는 중간 프로세스)
CgroupParent: 컨테이너의 상위 cgroup
Debug: runc에 대한 디버그 모드를 활성화합니다.
additional_env
SSH_AUTH_SOCK및COREDNS_CONFIG를 포함하여 컨테이너에 설정할 추가 환경 변수 목록입니다.
컨테이너에 전달될 컨테이너 런타임에 대한 환경 변수를 설정합니다.
클러스터에 영향을 주는 변경은 아니다. (다만, 해봐야지 아는 것이니까.)
이것으로 여기서 생성한 컨테이너들은 SSH 통신이 가능하고 DNS가 적용된다.
4.1.4수정한 config.toml을 적용 및 재실행.
sudo systemctl restart containerd
4.2 Windows에서 ContainerD 설치하는 과정
# 원하는 컨테이너형 윈도우즈 바이너리 다운로드 및 추출
$Version="1.6.4"
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
tar.exe xvf .\containerd-windows-amd64.tar.gz
# 복사 및 구성
# ProgramFiles 폴더로 복사하고 config.toml 설정
Copy-Item -Path ".\bin\*" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
cd $Env:ProgramFiles\containerd\
.\containerd.exe config default | Out-File config.toml -Encoding ascii
# 구성을 검토합니다. 설정에 따라 조정할 수 있습니다:
# - the sandbox_image (Kubernetes pause image)
# - cni bin_dir and conf_dir locations
Get-Content config.toml
# 서비스 등록 및 시작
.\containerd.exe --register-service
Start-Service containerd
# SIG-Windows is really the center for all things Windows in Kubernetes
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
설치 후 환경 변수 설정하여 CMD | PS에서 실행할 수 있도록 한다.
.\PrepareNode.ps1 -KubernetesVersion v1.26.4
7. 네트워크 구성
우리는 OpenSSH를 설치하기 전에도 노드들끼리 SSH통신이 가능하다. OpenSSH를 설치함으로써 무슨 차이가 있는가?
OpenSSH 설치 전에 SSH 통신
OpenSSH를 네트워크 추가 기능으로 설치하기 전에 노드 간 SSH 통신을 설정하면 SSH를 통해 각 노드에 직접 액세스할 수 있습니다.
Kubernetes 외부의 특정 명령을 문제 해결, 모니터링 또는 실행하는 데 유용할 수 있습니다.
그러나 이 접근 방식을 사용하려면 수동으로 SSH를 구성하고 SSH 키를 관리해야 하므로 시간이 많이 걸리고 노드 수가 증가함에 따라 확장성이 떨어질 수 있습니다.
OpenSSH 설치 후에 SSH 통신
OpenSSH를 설치하면 Kubernetes의 내장 네트워킹 및 보안 기능을 활용하여 노드 간의 SSH 통신을 관리하고 자동화할 수 있습니다.
OpenSSH를 사용하면 각 노드에서 SSH 키를 설정하고 관리할 필요 없이 클러스터의 Pod가 안전하고 안정적으로 서로 통신할 수 있습니다.
이 접근 방식은 네트워킹 및 보안 측면을 처리하기 위해 Kubernetes에 의존할 수 있으므로 확장 가능하고 관리하기가 더 쉽지만 SSH를 통해 각 노드에 대한 직접 액세스를 제공하지 않을 수 있으므로 특정 사용 사례에서 단점이 될 수 있습니다.
OpenSSH는Flannel또는Calico와 같은 다른 옵션보다 성능이 낮고 보안 수준이 낮을 수 있으므로 Kubernetes 클러스터에 권장되는 네트워킹 솔루션이 아닙니다.
master@master-k8s:/$ sudo kubectl get node
NAME STATUS ROLES AGE VERSION
master-k8s Ready control-plane 94m v1.26.3
work1-k8s Ready <none> 23s v1.26.3
vimosoft Ready <none> 1s v1.26.3
master@master-k8s:/$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether a8:5e:45:5d:d4:ff brd ff:ff:ff:ff:ff:ff
inet 192.168.0.123/24 brd 192.168.0.255 scope global dynamic noprefixroute enp4s0
valid_lft 5738sec preferred_lft 5738sec
inet6 fe80::8174:84b6:f2dc:9d19/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 62:9e:9e:66:b4:d4 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::609e:9eff:fe66:b4d4/64 scope link
valid_lft forever preferred_lft forever
4: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
link/ether ee:80:74:85:f0:11 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.1/24 brd 10.244.0.255 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::ec80:74ff:fe85:f011/64 scope link
valid_lft forever preferred_lft forever
7: veth0dfa08b3@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
link/ether 8a:ce:04:cf:df:2e brd ff:ff:ff:ff:ff:ff link-netns cni-2c120a52-0b01-d49c-b02c-98f5509c26b6
inet6 fe80::88ce:4ff:fecf:df2e/64 scope link
valid_lft forever preferred_lft forever
8: veth6b4c3d66@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0 state UP group default
link/ether 7a:58:69:51:cb:ae brd ff:ff:ff:ff:ff:ff link-netns cni-03edc287-173a-b701-ac76-b82436d19f9c
inet6 fe80::7858:69ff:fe51:cbae/64 scope link
valid_lft forever preferred_lft forever
master@master-k8s:/$ ssh work1@10.244.1.0
The authenticity of host '10.244.1.0 (10.244.1.0)' can't be established.
ECDSA key fingerprint is SHA256:amAD/tlcctnQOowAZ7KAEw8V/MtE5/m6GgNGPOOOfo0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.244.1.0' (ECDSA) to the list of known hosts.
work1@10.244.1.0's password:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-69-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Introducing Expanded Security Maintenance for Applications.
Receive updates to over 25,000 software packages with your
Ubuntu Pro subscription. Free for personal use.
https://ubuntu.com/pro
Expanded Security Maintenance for Applications is not enabled.
12 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
9 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm
New release '22.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Mon Apr 3 13:19:44 2023 from 192.168.0.123
work1@work1-k8s:~$