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 라고도 표현

쿠버네티스 클러스터 구성
- Control Plane(Master node) - 관리
- 워커 노드들의 상태를 관리하고 제어
- Single Master
- Multi Master(3, 5개의 Master nodes)
- Worker node - 실제 App 실행
- 도커 플랫폼을 통해 컨테이너를 동작하며 실제 서비스 제공
[실습]
실습환경



kubeadm을 이용한 쿠버네티스 설치 - On-premise
[설치 순서]
- Docker install
- Kubernetes Install
- 설치 전 환경설정
- kubeadm, kubectl, kubelet 설치
- control-plane 구성
- worker node 구성
- 설치확인
1. 도커 설치
도커 허브 - https://docs.docker.com/engine/install/ubuntu/
Install Docker Engine on Ubuntu
docs.docker.com
(도커 설치는 Docker 편 참조)

2. 쿠버네티스 설치
주의! 아래 절차부터는 Rocky Linux로 진행했습니다!

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 구성하는 것!





하지만 아직 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
'Cloud Native > Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 6(쿠버네티스 Pod) (0) | 2022.04.08 |
---|---|
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 5(쿠버네티스 Pod) (0) | 2022.04.05 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 4(쿠버네티스 아키텍쳐) (0) | 2022.03.14 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 3(kubectl 실습환경 구성 및 실습) (0) | 2022.03.10 |
쿠버네티스(Kubernetes) - 유튜브 'TTABAE-LEARN' 따라하기 1(쿠버네티스 시작) (0) | 2022.03.03 |