1. 설치 없이 쿠버네티스 사용하기

Web UI로 사용

  • 카타코다 쿠버네티스 플레이그라운드
    • 1시간 사용 가능
    • 여러 시나리오 별로 실습 가능
    • Master, word node 존재
  • Play with Kubernetes
    • Docker에서 제공, Docker hub 계정으로 사용
    • 4시간 사용가능
    • Master, word node 직접 구성하여 사용

 

1-1. 카타코다 플레이그라운드

 

launch.sh		#클릭하면 자동으로 Kubernetes 실행
kubectl cluster-info		#Kubernetes 실행 여부 확인

kubectl get nodes		#각 노드 및 쿠버네티스 버전 확인

 

1-2. Play with Kubernetes

1. Initializes cluster master node:		#마스터 노드로 초기화

kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
    

2. Initialize cluster networking:		#CNI(Container Network Interface 또는 Pod network) 구성

kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

 

> 1번 절차 완료시 나타나는 kubeadm join 명령어를 통해 새로운 워커 노드 생성(추가적으로 생성 가능)

kubectl get nodes -o wide

 

+ 클라우드 서비스에서 제공하는 쿠버네티스 도구
> 구글 쿠버네티스 엔진
> 아마존 쿠버네티스 일래스틱 컨테이너 서비스
> 애저 쿠버네티스 서비스

 

 

2. PC에 쿠버네티스 설치하기

쿠버네티스 클러스터를 직접 구성하는 도구

  • kubeadm
    • 공식 설치툴
    • 쿠버네티스에서 공식으로 제공하는 클러스터 생성/관리 도구
  • kubespray
    • 오픈소스 프로젝트
    • 다양한 형식으로 쿠버네티스 클러스터 구성가능
    • On-premise에서 상용 서비스 클러스터 운영시 유용
    • 다양한 CNI 제공

CNI(Container Network Interface)

  • 컨테이너 - 컨테이너 간 통신 인터페이스를 지원하는 SW
  • 쿠버네티스 사용시 반드시 설치
  • VxLAN, Pod Network 라고도 표현

컨테이너도 고유의 IP를 갖기 때문에 서로 통신을 위해선 CNI가 필요하다.

 

 

쿠버네티스 클러스터 구성

  • Control Plane(Master node) - 관리
    • 워커 노드들의 상태를 관리하고 제어
    • Single Master
    • Multi Master(3, 5개의 Master nodes)
  • Worker node - 실제 App 실행
    • 도커 플랫폼을 통해 컨테이너를 동작하며 실제 서비스 제공

 

[실습]

실습환경

VM+우분투 및 Xshell 환경구성은 docker 편 참조


kubeadm을 이용한 쿠버네티스 설치 - On-premise

[설치 순서]

  1. Docker install
  2. Kubernetes Install
    1. 설치 전 환경설정
    2. kubeadm, kubectl, kubelet 설치
    3. control-plane 구성
    4. worker node 구성
    5. 설치확인

1. 도커 설치

도커 허브 - https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

(도커 설치는 Docker 편 참조)

 

2. 쿠버네티스 설치

주의! 아래 절차부터는 Rocky Linux로 진행했습니다!

https://kubernetes.io/

 

Kubernetes

Run K8s Anywhere Kubernetes is open source giving you the freedom to take advantage of on-premises, hybrid, or public cloud infrastructure, letting you effortlessly move workloads to where it matters to you.

kubernetes.io

2-1. 설치 전 환경설정

따배런 이성미 강사님 Github URL : https://github.com/237summit/k8s_core_labs

 

GitHub - 237summit/k8s_core_labs

Contribute to 237summit/k8s_core_labs development by creating an account on GitHub.

github.com

#swap off
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab		#쿠버네티스 홈페이지에 있는 중요한 내용으로 swap을 꺼주어야함.

#bridge
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf		#마스터, 노드1,2가 브릿지 네트워크를 지원하도록 구성
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

#방화벽 해제
systemctl stop firewalld		#쿠버네티스는 대부분 방화벽을 해제하고 사용함.
systemctl disable firewalld

 

2-2. kubeadm, kubectl, kubelet 설치

kubeadm = 쿠버네티스 전체를 관리하고 운영하는 command
kubelet = daemon, 컨테이너 조작 및 마스터와 통신
kubectl = 쿠버네티스 관리 명령어
#쿠버네티스 설치

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

systemctl start kubelet		#daemon 실행
systemctl enable kubelet

 

2-3. control-plane(Master node) 구성

  • 'Creating a cluster with kubeadm' - 한개의 kubeadm을 통해 cluster 구성하는 방법
  • Docker Playground에서 여기서부터 진행한 것!

# control-plain initialize
# 컨트롤 플레인이니 마스터 노드에서만!
kubeadm init		#API에 controller, scheduler, etcd, coreDNS 구성하는 것!

work node들이 join 할 수 있도록 저장
kubectl get nodes 명령 실패 / root가 아닌 다른 일반적인 유저들이 kubectl 명령어를 쓰기 위해선 해당 명령어를 이용해야함.
해당 명령어를 다른 user에게도 적용하면(디렉토리 생성 / config 파일 생성 / 권한 부여) kubectl 명령어를 허가 받게 됨

 

하지만 아직 CNI가 없기 때문에 마스터노드의 STATUS가 NotReady이다.

설명이 나와있지만 위브넷을 설치하기 위해 https://www.weave.works/docs/net/latest/kubernetes/kube-addon/로 방문!

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

성공!

 

2-4. worker node 구성

Master와 Join

token.txt에 저장된 명령어를 복붙(ctl + ins / shift + ins) 하여 연결

 

!주의, Kubernetes 1.22v 부터는 Worker node에서 Join 시 localhost:8080 문제로 오류 발생

해결방법으로는 도커를 Linux 의 systemd 의 cgroup 드라이에 맞춰준다!

cat <<EOF | tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

+ 쿠버네티스 명령어 자동완성 https://kubernetes.io/docs/reference/kubectl/cheatsheet/

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc

 

※ Kubernetes 설치 전반적인 과정 https://box0830.tistory.com/259

※ kubeadm 구성 단계에서 오류가 날 경우 reset 과정이 필요할 수 있다!(참고 - https://wookiist.dev/143 )

※ 재시작 시 오류가 날 경우 https://syhwang.tistory.com/51

※ CentOS 7 방화벽 https://emunhi.com/view/201808/19110656002?menuNo=10004 

※ 포트 확인 https://server-engineer.tistory.com/840

※ Worker node 에서 kubectl 사용 가능하게 설정 https://not-to-be-reset.tistory.com/468

※ systemd - cgroup https://morian-kim.tistory.com/17 / https://velog.io/@borab/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%84%B1-Step-2 / https://kubernetes.io/ko/docs/setup/production-environment/_print/#%EB%8F%84%EC%BB%A4