본문 바로가기
가상화/Kubernetes

[Kubernetes] 쿠버네티스

by JINJINC 2023. 5. 12.
728x90
반응형

쿠버네티스(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 |
------------------------------------------------------------------------

쿠버네티스

728x90
반응형

'가상화 > Kubernetes' 카테고리의 다른 글

[Kubernetes] kubectl  (0) 2023.05.12
[Kubernetes] Cluster 전체구조  (0) 2023.05.12
[Kubernetes] 쿠버네티스 cluster 구성/ reset  (0) 2023.05.12

댓글