Kubernetes, k8s

Kubernetes(k8s) 클러스터

youngjae5427 2023. 10. 27. 03:15

쿠버네티스(k8s, Kubernetes, 큐브, kube)는 컨테이너화된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼으로

 

작동 중인 쿠버네티스 배포 -> 클러스터 

 

쿠버네티스는 컨테이너를 "포드(pod)"로 분류하고

포드는 그룹화된 컨테이너에 추상화 계층을 추가하므로 사용자가 워크로드를 예약하고 네트워킹 및 스토리지와 같은 필수 서비스를 컨테이너에 제공함

 

▶ 사용이미지 : Ubuntu 20.04.7z , vt-x 체크, hyper-V disable

     master node 1개 : 메모리 4G : CPU 2/1 : nat 300G (single)

     work node 2개 : 메모리 4G : CPU 2/1 : nat 200G (single)

     id/password : user01/test1234 

 

▶ ip  설정

master 192.168.2.10 [8.8.8.8/192.168.2.2]

work1 192.168.2.11 [8.8.8.8/192.168.2.2]

work2 192.168.2.12 [8.8.8.8/192.168.2.2]

 

hostnamectl set-hostname [master/work1/work2]

apt update
apt install -y net-tools
apt install -y curl
ssh 확인
 
win10에서 ssh 접속 확인 superputty사용
master,work1,work2 설정 진행
network:
version: 2
ethernets:
ens33
dhcp4: no
addresses: [192.168.2.xx/24]
gateway4: 192.168.2.2
nameservers:
addresses: [8.8.8.8,8.8.4.4]

nano /etc/hosts
192.168.2.10 master
192.168.2.11 work1
192.168.2.12 work2


netplan apply 
hostname -i 
ping 확인

 

 

▶ win10 에서 superputty 이용하여 ssh 접속

winscp 다운
superputty ssh접속 확인

master, work1, work2 모두 접속

 

 

참고 : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스 설치 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm으로 클러스터 생성하기 페이지를 참고한다.

kubernetes.io


▶ superputty 이용, #에서 진행

▶ 모든 스왑 비활성화 진행 (모든 노드에서 진행)

swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  

 

▶ 모든 노드에서 진행

1. Using Docker Repository (패키지 설치, Docker GPG Key추가, Docker Repository추가)

sudo apt update --> rm -rf ......

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

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd


2. containerd 설치

sudo apt update
sudo apt install -y containerd.io
sudo systemctl status containerd

3. 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


4.  소켓 생성 확인
ls /var/run/containerd/containerd.sock


 


▶  kubeadm, kubelet 및 kubectl 설치

모든 머신에 다음 패키지들을 설치

 

- kubeadm: 클러스터를 부트스트랩하는 명령, 클러스터를 초기화하고 관리하는 기능.

- kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트.

데몬으로 동작하며 컨테이너를 관리

- kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티. 클라이언트 전용 프로그램.

1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치.
sudo mkdir /etc/apt/keyrings
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

 
2. 구글 클라우드의 공개 사이닝 키를 다운로드
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

 
3. 쿠버네티스 apt 리포지터리를 추가
echo "deb [signed-by=/etc/apt/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


 
5. kubeadm 버전을 확인 --> kubeadm version

 

 

넷필터 브릿지 설정 (모든 모드에서 진행)

modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

 

 

마스터 노드 초기화 --> kubeadm init

kubeadm init kubeadm config images pull 
<생성된 키>

kubeadm join 192.168.2.10:6443 --token np2wwl.4imw6mpdmvkvjl5u --discovery-token-ca-cert-hash sha256:40905e46cf8b28f61c59fbd9d88cfd530529ec7e7cc6cfc26c296ac4c943a773

kubeadm join 192.168.2.10:6443 --token KEY1 --discovery-token-ca-cert-hash sha256:KEY2
 
KEY1
kubeadm token list

KEY2
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'


토큰 재발급하기: kubeadm token create --print-join-command



 

  유저 설정

다음 명령을 실행하면 .kube/config 파일이 설정되면서 사용이 가능함. 이 실습은 `마스터 노드`에서만 진행.

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

work 노드 조인하기

본인의 콘솔에 출력된 토큰과 hash 값을 사용해 조인을 수행해야 함. 다음 명령은 `워커 노드`에서 실습을 진행.

work1, work2 node에서 join 수행

 

▶ pod 네트워크 배포

`마스터 노드`에서 다음 명령을 실행하면 앞서 구성한 유저 설정을 통해 클러스터에 cilium을 설치.

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 version --client 


설치 검증 : cilium status --wait


모두 Not Ready --> Ready 상태로 변경됨

참고 : https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/

 

Use Cilium for NetworkPolicy

This page shows how to use Cilium for NetworkPolicy. For background on Cilium, read the Introduction to Cilium. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. I

kubernetes.io

참고 : https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#validate-the-installation

 

Cilium Quick Installation — Cilium 1.14.3 documentation

Install Cilium into the EKS cluster. Note If you have to uninstall Cilium and later install it again, that could cause connectivity issues due to aws-node DaemonSet flushing Linux routing tables. The issues can be fixed by restarting all pods, alternativel

docs.cilium.io

 

'Kubernetes, k8s' 카테고리의 다른 글

Label 배포명세서  (0) 2023.11.01
Configure Liveness  (0) 2023.11.01
HOSTPATH  (0) 2023.10.31
Emtpy-dir ( volume )  (0) 2023.10.30
요구 명세 (pod생성, 포트포워딩, 웹접속)  (0) 2023.10.30