Kubernetes

K8S - On prem Install

빠빠담 2023. 3. 17. 02:43
반응형

 

 

 

- 노드별 핑 테스트

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