쿠버네티스(Kubernetes)란?
Kubernetes, 또는 쿠버네티스, 또는 간단히 "큐브 (kube)"는 Linux 컨테이너 작업을 자동화하는 오픈소스 플랫폼을 뜻합니다. 플랫폼에서는 컨테이너화된 애플리케이션을 배포하고 확장하는 데 수동 프로세스가 필요하지 않습니다. 즉, Linux 컨테이너를 실행하는 호스트 그룹을 함께 클러스터링할 수 있으며 쿠버네티스를 통해 이러한 클러스터를 쉽고 효율적으로 관리할 수 있습니다.
Cluster = Domain
master= Domain Controller(Controller) => kubernetes의 플랫폼으로 관리하는 PC
node01 = Domain Memeber Computer(Container 실행되는 PC)
node02 = Domain Memeber Computer(Container 실행되는 PC)
쿠버네티스는 Pod 단위로 관리
1Pod = 1 Container
1Pod = 2 Container
한개의 Pod에는 여러개의 컨테이더가 포함될 수도 있습니다.
쿠버네티스가 기본세팅을 지정하면 그것에 맞게 항상 유지시켜주는 프로그램입니다.
컨트롤 플레인: 쿠버네티스 노드를 제어하는 프로세스의 컬렉션입니다. 여기에서 모든 태스크 할당이 시작됩니다.
노드: 컨트롤 플레인에서 할당된 요청 태스크를 수행하는 머신입니다.
포드: 단일 노드에 배포된 하나 이상의 컨테이너 그룹입니다. 포드에 있는 모든 컨테이너는 IP 주소, IPC, 호스트 이름, 기타 리소스를 공유합니다. 포드는 기본 컨테이너에서 네트워크와 스토리지를 추상화합니다. 이렇게 하면 클러스터에서 컨테이너를 더 쉽게 이동할 수 있습니다.
복제 컨트롤러: 이 컨트롤러는 클러스터에서 실행되어야 하는 동일한 포드 복사본의 개수를 제어합니다.
서비스: 포드에서 작업 정의를 분리합니다. 쿠버네티스 서비스 프록시는 클러스터에서 다른 위치로 이동된 경우나 교체된 경우에 상관없이 서비스 요청을 적절한 포드로 자동 수신합니다.
Kubelet: 이 서비스는 노드에서 실행되며 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인합니다.
kubectl: 쿠버네티스의 커맨드 라인 구성 툴입니다.
출저 : 쿠버네티스(Kubernetes, k8s)란? 기본 개념, 사용법, 차이점 (redhat.com)
쿠버네티스 구성
■ 컴퓨터 재부팅한 경우 반드시 실행하기
◎ swap 끄기 (master, worker 공통)
# sudo swapoff -a
# sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
◎ Cluster 구성하기
# sudo kubeadm reset (master, worker 공통)
# init 과 CNI 다시 구성하기 (master만)
# join 구성하기 (worker만)
■ 기본 환경 구성
◎ vmware15 = Linux(Ubuntu 64bit), Processors(4개), Virtualize Intel VT-x/EPT or AMD-V/RVI 체크하기
◎ 설치 = ubuntu-22.04.1-live-server-amd64.iso
◎ 컴퓨터이름 = 메모리:4G, 하드디스크:40G
◎ ssh, net-tools 설치 (master, worker 공통)
$ sudo apt update
$ sudo apt install -y net-tools
$ sudo apt install -y ssh
$ sudo -i
# passwd //root 패스워드 구성
◎ ubuntu-22.04.1 주소 변경
# cd /etc/netplan
# ls
# vi 00xxxxxxxxxx <== 아래 구성 복사후 붙이기
network:
ethernets:
ens32:
addresses:
- 192.168.1.104/24
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
routes:
- to: default
via: 192.168.1.2
version: 2
# netplan apply
◎ host파일에 클러스터에 속한 컴퓨터 이름 등록하기
# vi /etc/hosts
192.168.1.104 master
192.168.1.101 node01
192.168.1.102 node02
■ Docker 설치하기(master, worker 공통)
sudo apt install -y docker.io
sudo apt-get update
■ Kubernetes 설치하기
▣ swap 끄기 (master, worker 공통)
# sudo swapoff -a
# sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
---------------------------------------------
| ♧ swap 영구적으로 끄는 방법 ♧ |
| # swapoff -a |
| # vi /etc/fstab |
| /swap.img -생략- //삭제하기 |
| # rm -rf /swap.img |
| # reboot |
| # free -h |
---------------------------------------------
▣ Kubernetes 설치 (master, worker 공통)
# vi kubernetes.install
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
sudo 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
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# sh kubernetes.install
# mkdir /etc/containerd
# touch /etc/containerd/config.toml
# sudo containerd config default | sudo tee /etc/containerd/config.toml
# systemctl is-enabled containerd
# systemctl enable containerd
# sudo vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true --> 112줄에 있음 <<기본 false로 되어있는 부분을 true로 변경>>
# sudo systemctl restart containerd
▣ master 를 full clone해서 node01, node02 만들기
# sudo hostnamectl set-hostname node01
# cd /etc/netplan
# ls
# vi 00xxxxxxxxxx <== 아래 구성 복사후 붙이기
192.168.1.101 수정
# netplan apply
# sudo hostnamectl set-hostname node02
# cd /etc/netplan
# ls
# vi 00xxxxxxxxxx <== 아래 구성 복사후 붙이기
192.168.1.102 수정
# netplan apply
■ Host'PC에 MobaXterm_Installer 설치
. 세션별 글자크기 변경 : Ctrl + (- 또는 +)
. settings -> configuration -> Terminal : size ?
-> Desplay : Skin selection ?
■ Kubernetes Cluster 구성하기
▣ 마스터노드 설정 (master)
# sudo kubeadm init --pod-network-cidr=10.244.0.0/16
▣ Node JOIN (worker 공통)
# kubeadm join xxx.xxx.xxx.xxx:6443 --token xxxxx.xxxxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
▣ CNI 설치 (master)
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config <= yes
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
▣ JOIN 확인 (master)
# kubectl get nodes
▣ 쿠버네티스 명령어 자동 완성
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
# source <(kubeadm completion bash)
# echo "source <(kubeadm completion bash)" >> ~/.bashrc
▣ 쿠버네티스 기본 명령어
# kubectl get nodes
# kubectl get nodes -o wide
# kubectl get pods
# kubectl get pods -o wide
# kubectl get pods --all-namespaces
# kubectl get pods --namespace=kube-system
# kubectl get pods --namespace=kube-system -o wide
■ 대시보드 구성(master)
# 클러스터로 구성된[master, node01, node02] => 전부 Power ON 상태에서 아래 진행하기
# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
# kubectl edit services kubernetes-dashboard -n kubernetes-dashboard
-생략-
sessionAffinity: None
type: ClusterIP --> ClusterIP를 NodePort로 수정
-생략-
# kubectl get services -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.107.41.220 <none> 8000/TCP 31m
kubernetes-dashboard NodePort 10.111.247.69 <none> 443:32621/TCP 32m < -- 기다려야 보임
# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
# cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
# kubectl get serviceaccounts -n kubernetes-dashboard
# kubectl describe clusterrole kubernetes-dashboard
# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
# kubectl create token admin-user --namespace kubernetes-dashboard
# kubectl get services -n kubernetes-dashboard
# chrome에서 실습하기
# Host'PC에서 [ https://192.168.1.104:31600 ] 접속후 토큰 붙여넣기
# 로그인후 네이스페이스 선택 : [default]에서 [모든 네임스페이스]로 변경하기^^~
----------------------------------------------------------------------------------------
| ♧ 재부팅한 경우 토큰 다시 생성하고 접속하기 ♧ |
| # kubectl create token admin-user --namespace kubernetes-dashboard |
| # kubectl get services -n kubernetes-dashboard |
------------------------------------------------------------------------
'가상화 > Kubernetes' 카테고리의 다른 글
[Kubernetes] kubectl (0) | 2023.05.12 |
---|---|
[Kubernetes] Cluster 전체구조 (0) | 2023.05.12 |
[Kubernetes] 쿠버네티스 cluster 구성/ reset (0) | 2023.05.12 |
댓글