반응형
- 노드별 핑 테스트
ping 192.168.0.1
ping 192.168.0.2
- 스왑 OFF
sudo swapoff -a # 현재 시스템에 적용(리부팅하면 재설정 필요)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 리부팅 필수
- 컨테이너 런타임 CRI
https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html
# Using Docker Repository
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
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
# containerd 설치
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C를 눌러서 나간다.
# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF
sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd
# 소켓이 있는지 확인한다.
ls /var/run/containerd/containerd.sock
- kubeadm: 클러스터를 부트스트랩하는 명령이다. 클러스터를 초기화하고 관리하는 기능을 갖는다.
- kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다. 데몬으로 동작하며 컨테이너를 관리한다.
- kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다. 클라이언트 전용 프로그램이다.
cat <<EOF > kube_install.sh
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# 3. 쿠버네티스 apt 리포지터리를 추가한다.
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
# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF
sudo bash kube_install.sh
kubeadm version
- 넷필터 브릿지 설정
sudo -i
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
exit
- 마스터 노드 초기화
sudo kubeadm init
---
Your Kubernetes control-plane has initialized successfully!
# 1) 유저 설정
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
# 2) 파드 네트워크 설정
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/
# 3) 워커 노드 조인 방법
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.142.0.3:6443 --token xcs79e.vnernooln6yyimtv \
--discovery-token-ca-cert-hash sha256:c9f8642746515eadc28e72c687eface2fa64da93ddca5a30b4ccf931dbcce839
1 유저 설정
다음 명령을 실행하면 .kube/config 파일이 설정되면서 사용이 가능해진다. 이 실습은 `마스터 노드`에서만 진행한다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2 워커 노드 조인
sudo kubeadm join 10.142.0.3:6443 --token xcs79e.vnernooln6yyimtv \
--discovery-token-ca-cert-hash sha256:c9f8642746515eadc28e72c687eface2fa64da93ddca5a30b4ccf931dbcce839
- 클러스터 구성 초기화 및 토큰 확인
sudo kubeadm reset
sudo kubeadm token list // 토큰 리스트 확인하기
sudo kubeadm token create --print-join-command // 토큰 재발급하기
- 파드 네트워크 배포
마스터 노드에서 다음 명령을 실행하면 앞서 구성한 유저 설정을 통해 클러스터에 cilium을 설치한다.
https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/
curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install
---
cilium status
- 파드 테스트
kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080
kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/tc-64df966b58-4jvvv 1/1 Running 0 2m15s
pod/tc-64df966b58-tb2ck 1/1 Running 0 2m15s
pod/tc-64df966b58-trjg6 1/1 Running 0 2m15s
pod/tc-64df966b58-tsldq 1/1 Running 0 2m15s
pod/tc-64df966b58-zzs6v 1/1 Running 0 2m15s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m59s
service/tc NodePort 10.108.81.72 <none> 80:30617/TCP 2m4s
curl http://k8sw:30617
트러블 슈팅
- 워커 노드 조인시 오류
- when
$ sudo kubeadm join 192.168.0.185:6443 --token 7hzzlk.qt8gkil1mvuqhigq \
--discovery-token-ca-cert-hash sha256:370346653a6ae8c3e0a4d499e38d77fdb30ceaff9b6218f79f3a0716885e8171
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 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
- then
- 넷필터 브릿지 재설정
sudo -i
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
exit
반응형
'Kubernetes' 카테고리의 다른 글
Schedule pod on master (0) | 2023.03.17 |
---|---|
ArgoCD - Account setup (0) | 2022.01.02 |
Namespace - Terminating (0) | 2022.01.01 |
AWS load balancer controller on Fargate - CrashLoopBackOff (0) | 2021.12.28 |
Docker network (0) | 2021.12.20 |