1) 온라인에서 사용하는 쿠버네티스
* Play with kubernetes
* Killercoda
2) 개발자를 위한 쿠버네티스
* Docker Desktop (유료)
* minikube
* Kind
* k3s
3) 서비스용 쿠버네티스 (실제 서비스 환경처럼 구축하는 것)
* kops
* kubespray - 대용량(노드 많을때) 유리, (ansible 기반) 시간 오래 걸림
*** kubeadm CMD - 중용량, 직접 구성하는 경우
(master)**
(ㄱ) 설치전 준비사항
- ip 설정
- 스왑 off: swapoff -a
- 커널 패러미터 설정: sysctl ip_forward 기능 ON (포트포워딩)
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/k8s.conf
----------------------------------------
$ cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
----------------------------------------
----------------------------------------
/etc/sysctl.d]$ cat k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
----------------------------------------
(ㄴ) 컨테이너 런타임 설치
- containerd 설정
(ㄷ) kubectl, kubeadm, kubelet 설치
- kubectl, kubeadm, kubelet 설치
- auto-completion 기능 설정, <tab><tab> 시 옵션 나옴
(ㄹ) 클러스터 구성
- control-plain 구성 (master 노드)
(초기구성)
# kubeadm init --apiserver-advertise-address 192.168.10.10
(kubeconfig 설정)
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
- worker node 구성
(controlplane join) - 하위 노드 master에 조인
# kubeadm join 192.168.10.10:6443 --token vb2n8m.5gnqo1mpbng8zdkh \\
--discovery-token-ca-cert-hash \\
sha256:03e1f0a96ab67f39c6769465b2200104a5da8cee83692805e8346026f9d7c462
(ㅁ) CNI 설치 및 구성
* calico
# kubectl apply -f <https://docs.projectcalico.org/manifests/calico.yaml>
(ㅂ) 설치 확인
# kubectl get nodes
# kubectl get pods -n kube-system
(ㅅ) 에러처리
* VPN Gateway
* ImagePullSecet 설정 (이미지 pull 개수의 한계 넘을 시의 설정)
(node1/node2/node3)
kubectl create secret docker-registry regcred \\
--docker-username='nam3' \\
--docker-password='dockerHub_password' \\
--docker-server=https://registry-1.docker.io \\
--docker-email=thgus296@naver.com
# 모든 네임스페이스에 기본 적용
# - ServiceAccount에 연결(모든 POD에 적용)모든 네임스페이스에 기본 적용
# - ServiceAccount에 연결(모든 POD에 적용)
kubectl patch serviceaccount default \\
-p '{"imagePullSecrets": [{"name": "regcred"}]}'
# 에러나면 실행하기
# (master, node1,2,3)
kubeadm reset
# (master)
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube
# 이건뭥미?
kubectl get nodes
watch kubectl get pods -A
-> Init:ErrImagePull
kubectl delete pod <POD> -n kube-system
수업 자료
쿠버네티스 가상 컨테이너 사이트
킬러코다 다양한 랩 테스트 가상공간