Kubernetes 빠른 배포 가이드¶
0. 개요¶
이 문서를 참조하여 Kubernetes를 성공적으로 배포하면 기본적으로 다음 작업이 완료됩니다.
기능 구성 요소 적용 범위
-
kubernetes 1.24.2 고가용성 배포
-
coredns 구성 요소 설치
-
node-local-dns 구성 요소 설치
-
ingress-nginx 구성 요소 설치
-
metrics-server 구성 요소 설치
-
openebs-provisioner 구성 요소 드라이버 설치
리소스 목록
1. "최소 사양"은 POC 시나리오 배포에 적합하며 기능 검증만을 위한 것으로, 프로덕션 환경으로 사용하기에 적합하지 않습니다.
2. 프로덕션 배포는 실제 수집되는 데이터 양을 기준으로 평가하며, 수집되는 데이터 양이 많을수록 TDengine, OpenSearch의 스토리지 및 사양 구성도 그에 따라 높아져야 합니다.
| 용도 | 리소스 유형 | 최소 사양 | 권장 사양 | 수량 | 비고 |
|---|---|---|---|---|---|
| Kubernetes Master | 물리 서버|가상 머신 | 4C8GB 100GB | 8C16GB 100GB | 3 | 버전: 1.24.2 참고: 가상 머신인 경우 리소스 사양을适当히 높여야 하며, 마스터 노드 하나를 배포 노드로 겸용 |
| Kubernetes Worker | 물리 서버|가상 머신 | 4C8GB 100GB | 8C16GB 100GB | 4 | k8s 클러스터 worker 노드, Guance 애플리케이션, k8s 구성 요소, 기본 구성 요소 서비스(Mysql 5.7.18, Redis 6.0.6) 호스팅 |
| Guance 프록시 서비스 | 물리 서버|가상 머신 | 2C4GB 100GB | 4C8GB 200GB | 1 | nginx 리버스 프록시 서버 배포, ingress 엣지 노드로 프록시 참고: 보안상 클러스터 엣지 노드를 직접 노출하지 않음 |
| Guance 네트워크 파일 시스템 서비스 | 물리 서버|가상 머신 | 2C4GB 200G | 4C8GB 1TB 고성능 디스크 | 1 | 네트워크 파일 시스템, 네트워크 스토리지 서비스 배포, 기본 NFS(기존 NFS 서비스가 있는 경우 해당 머신 생략 가능) |
| DataWay | 물리 서버|가상 머신 | 2C4GB 100GB | 4C8GB 100GB | 1 | DataWay 배포용 |
| OpenSearch | 물리 서버|가상 머신 | 4C8GB 1TB | 8C16G 1TB | 3 | OpenSearch 버전: 2.2.1 참고: 비밀번호 인증 활성화 필요, 호환 버전 형태소 분석 플러그인 analysis-ik 설치 |
| TDengine | 물리 서버|가상 머신 | 4C8GB 500GB | 8C16G 1TB | 3 | TDengine 버전: 2.6.0.18 |
| 기타 | 메일 서버/SMS | - | - | 1 | SMS 게이트웨이, 메일 서버, 알림 채널 |
| 등록된 정식 와일드카드 도메인 | - | - | 1 | 주 도메인은 등록 필요 | |
| SSL/TLS 인증서 | 와일드카드 도메인 인증서 | 와일드카드 도메인 인증서 | 1 | 사이트 보안 보장 |
1. 사전 조건¶
중요
- 기본 환경 오프라인 리소스 패키지를 모든 클러스터 노드에 업로드하고 서버 /etc 디렉터리에 압축 해제
- 배포 노드와 클러스터의 다른 노드 간 SSH 비밀번호 없는 로그인이 설정되어 있어야 함(배포 노드 자체 포함)
- Guance 플랫폼 오프라인 리소스 패키지를 모든 클러스터 노드에 업로드하고 컨테이너 런타임 환경(containerd)에 가져오기
1.1 비밀번호 없는 로그인 설정 참고¶
# 배포 머신에 로그인하여 명령어 실행
# 공개 키 쌍 생성
[root@k8s-node01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vruHbsWUUL5M9k0dg15zhIX5Y9MZVJ+enf0JhzF5lP0 root@k8s-node02
The key's randomart image is:
+---[RSA 2048]----+
| .. o@B|
| .. .**B|
| .+..+o+X|
| +oo +*=E|
| Soo .oo==|
| . o o o|
| .o ..|
| o.. |
| o=+ |
+----[SHA256]-----+
# $IP는 자체 노드를 포함한 모든 노드 주소, 프롬프트에 따라 yes 및 root 비밀번호 입력
ssh-copy-id $IP
# 각 노드에 python 심볼릭 링크 설정, 기본적으로 실행 불필요 [python3를 사용하는 일부 버전에서 필요]
# ssh $IP ln -s /usr/bin/python3 /usr/bin/python
2. 배포 준비¶
2.1 리소스 패키지 다운로드¶
기본 환경 오프라인 리소스 패키지 다운로드 주소 Download
2.2 오프라인 리소스 패키지 구조 설명¶
오프라인 패키지 내용 간단 설명
/etc/kubeasz는 kubeasz 메인 디렉터리/etc/kubeasz/example예제 구성 파일 포함/etc/kubeasz/clusters생성된 클러스터 관련 구성 파일 포함/etc/kubeasz/guanceGuance 관련 charts, yaml 등 정보 포함/etc/kubeasz/bink8s/etcd/docker/cni 등 바이너리 파일 포함/etc/kubeasz/down클러스터 설치 시 필요한 오프라인 컨테이너 이미지 패키지 등 포함/etc/kubeasz/down/packages클러스터 설치 시 필요한 시스템 기본 소프트웨어 포함
3. 클러스터 설치¶
3.1 주의사항¶
중요
-
각 노드의 시간대 설정 및 시간 동기화 확인
-
문서의 명령어는 기본적으로 root 권한으로 실행 필요
-
깨끗한 시스템에서 설치를 시작해야 하며, kubeadm이나 다른 k8s 배포판을 설치한 적이 없는 시스템 사용
-
원클릭 설치 전에 사용자 정의 클러스터 생성 구성 파일을 반드시 구성하고 확인하세요. 주로 /etc/kubease/clusters/xxx/hosts 및 /etc/kubeasz/clusters/config.yaml 확인
-
식별하기 쉬운 호스트명으로 변경 [선택 사항]
3.2 클러스터 역할 계획¶
고가용성 클러스터에 필요한 노드 구성은 다음과 같습니다
| 역할 | 수량 | 설명 |
|---|---|---|
| deploy(배포) 노드 | 1 | ansible/ezctl 명령어 실행, 일반적으로 첫 번째 master 노드와 겸용 |
| etcd 노드 | 3 | etcd 클러스터는 1,3,5,... 홀수 개의 노드가 필요, 일반적으로 master 노드와 겸용 |
| master 노드 | 3 | 고가용성 클러스터는 최소 2개의 master 노드 필요 |
| node 노드 | N | 애플리케이션 워크로드를 실행하는 노드, 필요에 따라 머신 사양 향상/노드 수 증가 가능 |
설명
기본 구성에서 컨테이너 런타임과 kubelet은 /var의 디스크 공간을 사용합니다. 디스크 파티션이 특수한 경우, 클러스터 구성 생성 전에 example/config.yml에서 컨테이너 런타임 및 kubelet 데이터 디렉터리를 설정하세요: CONTAINERD_STORAGE_DIR DOCKER_STORAGE_DIR KUBELET_ROOT_DIR
3.3 배포 단계¶
3.3.1 배포 노드에서 k8s 설치 오케스트레이션¶
배포 노드 서버에 로그인 /etc/kueasz 디렉터리로 이동하여 다음 명령어 실행
# 배포 머신에 docker 서비스 설치
# registry 로컬 저장소 시작
# 오프라인 환경에 필요한 이미지 패키지 로드 후 registry 저장소에 푸시
./ezdown -D
./ezdown -X
ezdown의 더 많은 매개변수는 ezdown을 실행하여 확인하세요.
팁
실행이 안 될 경우 /etc/kubeasz 디렉터리로 이동하여 ./ezdwon -h 실행하여 확인
3.3.2 클러스터 구성 인스턴스 생성¶
# kubeasz 컨테이너 실행
./ezdown -S
# 새 클러스터 guancecloud 생성
# 클러스터 이름은 필요에 따라 사용자 정의 가능, 해당 클러스터 이름과 일치하는 디렉터리 생성
docker exec -it kubeasz ezctl new guancecloud
# 결과 표시 예시
2022-10-19 10:48:23 DEBUG generate custom cluster files in /etc/kubeasz/clusters/guancecloud
2022-10-19 10:48:23 DEBUG set version of common plugins
2022-10-19 10:48:23 DEBUG cluster k8s-01: files successfully created.
2022-10-19 10:48:23 INFO next steps 1: to config '/etc/kubeasz/clusters/guancecloud/hosts'
2022-10-19 10:48:23 INFO next steps 2: to config '/etc/kubeasz/clusters/guancecloud/config.yml'
그런 다음 프롬프트에 따라 클러스터 구성 파일을 수정합니다
# 이전 클러스터 역할 계획에 따라 hosts 파일 수정
'/etc/kubeasz/clusters/xxx/hosts'
# 기타 클러스터 수준의 주요 구성 옵션은 config.yml 파일에서 수정 가능 [기본값 사용 권장, 수정하는 매개변수를 잘 알고 있는 경우에만 수정]
'/etc/kubeasz/clusters/xxx/config.yml'
구성 파일 예시 내용은 다음과 같습니다
설명
사용자 정의 구성 항목이 필요한 경우 예시 구성 파일을 참조하세요
예시 구성 파일
# config.yaml
############################
# prepare
############################
# 선택적 오프라인 설치 시스템 소프트웨어 패키지 (offline|online)
# 오프라인 환경 기본값은 "offline"
INSTALL_SOURCE: "offline"
# 선택적 시스템 보안 강화 github.com/dev-sec/ansible-collection-hardening
OS_HARDEN: false
############################
# role:deploy
############################
# default: ca will expire in 100 years
# default: certs issued by the ca will expire in 50 years
CA_EXPIRY: "876000h"
CERT_EXPIRY: "438000h"
# kubeconfig 구성 매개변수
CLUSTER_NAME: "cluster1"
CONTEXT_NAME: "context-{{ CLUSTER_NAME }}"
# k8s version
K8S_VER: "__k8s_ver__"
############################
# role:etcd
############################
# 다른 wal 디렉터리를 설정하면 디스크 IO 경합을 피하여 성능 향상 가능
# 디스크 공간이 큰 디렉터리로 수정 권장, 실제 상황에 따라 결정
ETCD_DATA_DIR: "/var/lib/etcd"
ETCD_WAL_DIR: ""
############################
# role:runtime [containerd,docker]
############################
# ------------------------------------------- containerd
# [.]컨테이너 저장소 미러 활성화
ENABLE_MIRROR_REGISTRY: true
# [containerd]기본 컨테이너 이미지
SANDBOX_IMAGE: "easzlab.io.local:5000/easzlab/pause:__pause__"
# [containerd]컨테이너 영구 스토리지 디렉터리
# 디스크 공간이 큰 디렉터리로 수정 권장, 실제 상황에 따라 결정
CONTAINERD_STORAGE_DIR: "/var/lib/containerd"
# ------------------------------------------- docker
# [docker]컨테이너 스토리지 디렉터리
# 디스크 공간이 큰 디렉터리로 수정 권장, 실제 상황에 따라 결정
# 배포 머신에만 docker 서비스가 있음
DOCKER_STORAGE_DIR: "/var/lib/docker"
# [docker]Restful API 활성화
ENABLE_REMOTE_API: false
# [docker]신뢰하는 HTTP 저장소
INSECURE_REG: '["http://easzlab.io.local:5000"]'
############################
# role:kube-master
############################
# k8s 클러스터 master 노드 인증서 구성, 여러 IP 및 도메인 추가 가능 (예: 공인 IP 및 도메인 추가)
MASTER_CERT_HOSTS:
- "10.1.1.1"
- "k8s.easzlab.io"
#- "www.test.com"
# node 노드 상 pod 네트워크 마스크 길이 (각 노드에 할당 가능한 최대 pod IP 주소 결정)
# flannel이 --kube-subnet-mgr 매개변수를 사용하는 경우 이 설정을 읽어 각 노드에 pod 네트워크 할당
# https://github.com/coreos/flannel/issues/847
NODE_CIDR_LEN: 24
############################
# role:kube-node
############################
# Kubelet 루트 디렉터리
# 디스크 공간이 큰 디렉터리로 수정 권장, 실제 상황에 따라 결정
KUBELET_ROOT_DIR: "/var/lib/kubelet"
# node 노드 최대 pod 수
MAX_PODS: 110
# kube 구성 요소(kubelet, kube-proxy, dockerd 등)에 예약할 리소스 양 구성
# 값 설정은 templates/kubelet-config.yaml.j2 참조
KUBE_RESERVED_ENABLED: "no"
# k8s는 공식적으로 system-reserved를 경솔하게 활성화하는 것을 권장하지 않음, 장기 모니터링을 기반으로 시스템 리소스 사용 현황을 파악한 경우에만 가능
# 시스템 실행 시간에 따라 리소스 예약을 적절히 늘려야 함, 값 설정은 templates/kubelet-config.yaml.j2 참조
# 시스템 예약 설정은 4c/8g 가상 머신 기준, 최소 설치 시스템 서비스, 고성능 물리 서버 사용 시 예약을 적절히 늘릴 수 있음
# 또한 클러스터 설치 시 apiserver 등의 리소스 사용이 일시적으로 증가하므로 최소 1g 메모리 예약 권장
SYS_RESERVED_ENABLED: "no"
############################
# role:network [flannel,calico,cilium,kube-ovn,kube-router]
############################
# ------------------------------------------- flannel
# [flannel]flannel 백엔드 "host-gw","vxlan" 등 설정
FLANNEL_BACKEND: "vxlan"
DIRECT_ROUTING: false
# [flannel] flanneld_image: "quay.io/coreos/flannel:v0.10.0-amd64"
flannelVer: "__flannel__"
flanneld_image: "easzlab.io.local:5000/easzlab/flannel:{{ flannelVer }}"
# ------------------------------------------- calico
# [calico]CALICO_IPV4POOL_IPIP="off" 설정 시 네트워크 성능 향상 가능, 제한 조건은 docs/setup/calico.md 참조
CALICO_IPV4POOL_IPIP: "Always"
# [calico]calico-node가 사용하는 host IP 설정, bgp 피어는 이 주소를 통해 연결 설정, 수동 지정 또는 자동 검색 가능
IP_AUTODETECTION_METHOD: "can-reach={{ groups['kube_master'][0] }}"
# [calico]calico 네트워크 백엔드 설정: brid, vxlan, none
CALICO_NETWORKING_BACKEND: "brid"
# [calico]calico가 route reflectors를 사용할지 여부 설정
# 클러스터 규모가 50개 노드를 초과하는 경우 이 기능 활성화 권장
CALICO_RR_ENABLED: false
# CALICO_RR_NODES route reflectors 노드 구성, 설정하지 않으면 기본적으로 클러스터 master 노드 사용
# CALICO_RR_NODES: ["192.168.1.1", "192.168.1.2"]
CALICO_RR_NODES: []
# [calico]calico 버전 업데이트 지원: [v3.3.x] [v3.4.x] [v3.8.x] [v3.15.x]
calico_ver: "__calico__"
# [calico]calico 메인 버전
calico_ver_main: "{{ calico_ver.split('.')[0] }}.{{ calico_ver.split('.')[1] }}"
# ------------------------------------------- cilium
# [cilium]이미지 버전
cilium_ver: "__cilium__"
cilium_connectivity_check: true
cilium_hubble_enabled: false
cilium_hubble_ui_enabled: false
# ------------------------------------------- kube-ovn
# [kube-ovn]OVN DB 및 OVN Control Plane 노드 선택, 기본값은 첫 번째 master 노드
OVN_DB_NODE: "{{ groups['kube_master'][0] }}"
# [kube-ovn]오프라인 이미지 tar 패키지
kube_ovn_ver: "__kube_ovn__"
# ------------------------------------------- kube-router
# [kube-router]퍼블릭 클라우드에서는 제한이 있어 일반적으로 항상 ipinip를 활성화해야 함; 자체 환경에서는 "subnet"으로 설정 가능
OVERLAY_TYPE: "full"
# [kube-router]NetworkPolicy 지원 스위치
FIREWALL_ENABLE: true
# [kube-router]kube-router 이미지 버전
kube_router_ver: "__kube_router__"
busybox_ver: "1.28.4"
############################
# role:cluster-addon
############################
# coredns 자동 설치
dns_install: "yes"
corednsVer: "__coredns__"
ENABLE_LOCAL_DNS_CACHE: true
dnsNodeCacheVer: "__dns_node_cache__"
# local dns cache 주소 설정
LOCAL_DNS_CACHE: "169.254.20.10"
# metric server 자동 설치
metricsserver_install: "yes"
metricsVer: "__metrics__"
# dashboard 자동 설치
dashboard_install: "no"
dashboardVer: "__dashboard__"
dashboardMetricsScraperVer: "__dash_metrics__"
# prometheus 자동 설치
prom_install: "no"
prom_namespace: "monitor"
prom_chart_ver: "__prom_chart__"
# nfs-provisioner 자동 설치
# 기존 nfs가 있는 경우 반드시 "yes"로 구성하고 올바른 server 정보 설정
nfs_provisioner_install: "no"
nfs_provisioner_namespace: "kube-system"
nfs_provisioner_ver: "__nfs_provisioner__"
nfs_storage_class: "managed-nfs-storage"
nfs_server: "192.168.1.10"
nfs_path: "/data/nfs"
# network-check 자동 설치
network_check_enabled: false
network_check_schedule: "*/5 * * * *"
############################
# role:harbor
############################
# harbor version, 전체 버전 번호
HARBOR_VER: "__harbor__"
HARBOR_DOMAIN: "harbor.easzlab.io.local"
HARBOR_TLS_PORT: 8443
# if set 'false', you need to put certs named harbor.pem and harbor-key.pem in directory 'down'
HARBOR_SELF_SIGNED_CERT: true
# install extra component
HARBOR_WITH_NOTARY: false
HARBOR_WITH_TRIVY: false
HARBOR_WITH_CLAIR: false
HARBOR_WITH_CHARTMUSEUM: true
# ingress-nginx 관련 구성
ingress_nginx_install: "yes"
ingressnginxVer: v1.4.0
certgenVer: v20220916-gd32f8c343
호스트 구성
호스트 구성 예시
# 'etcd' cluster should have odd member(s) (1,3,5,...)
# 실제 계획에 따라 ip를 반드시 교체
[etcd]
192.168.1.1
192.168.1.2
192.168.1.3
# master node(s)
# 실제 계획에 따라 ip를 반드시 교체
[kube_master]
192.168.1.1
192.168.1.2
# work node(s)
# 실제 계획에 따라 ip를 반드시 교체
[kube_node]
192.168.1.3
192.168.1.4
# [optional] harbor server, a private docker registry
# 'NEW_INSTALL': 'true' to install a harbor server; 'false' to integrate with existed one
[harbor]
#192.168.1.8 NEW_INSTALL=false
# [optional] loadbalance for accessing k8s from outside
[ex_lb]
#192.168.1.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
#192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
# [optional] ntp server for the cluster
[chrony]
#192.168.1.1
[all:vars]
# --------- Main Variables ---------------
# Secure port for apiservers
SECURE_PORT="6443"
# Cluster container-runtime supported: docker, containerd
# if k8s version >= 1.24, docker is not supported
CONTAINER_RUNTIME="containerd"
# Network plugins supported: calico, flannel, kube-router, cilium, kube-ovn
# 해당 기본값 사용을 권장하거나 "flannel"로 수정
CLUSTER_NETWORK="calico"
# Service proxy mode of kube-proxy: 'iptables' or 'ipvs'
PROXY_MODE="ipvs"
# K8S Service CIDR, not overlap with node(host) networking
# 호스트 IP 대역과 충돌 불가
SERVICE_CIDR="10.68.0.0/16"
# Cluster CIDR (Pod CIDR), not overlap with node(host) networking
# 호스트 IP 대역과 충돌 불가
CLUSTER_CIDR="172.20.0.0/16"
# NodePort Range
NODE_PORT_RANGE="30000-32767"
# Cluster DNS Domain
CLUSTER_DNS_DOMAIN="cluster.local"
# -------- Additional Variables (don't change the default value right now) ---
# Binaries Directory
bin_dir="/opt/kube/bin"
# Deploy Directory (kubeasz workspace)
base_dir="/etc/kubeasz"
# Directory for a specific cluster
cluster_dir="{{ base_dir }}/clusters/_cluster_name_"
# CA and other components cert/key Directory
ca_dir="/etc/kubernetes/ssl"
3.3.3 원클릭 배포¶
위 작업을 올바르게 수행했는지 확인한 후 다음 명령어를 실행하여 빠른 배포를 진행합니다
팁
# 원클릭 설치 명령어, docker exec -it kubeasz ezctl setup xxx all 과 동일
# xxx는 생성된 클러스터 이름
dk ezctl setup guancecloud all
# 또는 단계별 설치, 자세한 내용은 dk ezctl help setup 을 실행하여 단계별 설치 도움말 확인
# dk ezctl setup guancecloud 01
# dk ezctl setup guancecloud 02
# dk ezctl setup guancecloud 03
# dk ezctl setup guancecloud 04
# 명령어 실행 후 task에 오류가 없어야 함
TASK [cluster-addon : DNS 배포 파일 준비] *********************************************
changed: [10.200.14.144]
TASK [cluster-addon : coredns 배포 생성] *********************************************
changed: [10.200.14.144]
TASK [cluster-addon : dnscache 배포 파일 준비] *****************************************
changed: [10.200.14.144]
TASK [cluster-addon : dnscache 배포 생성] ********************************************
changed: [10.200.14.144]
TASK [cluster-addon : metrics-server 배포 파일 준비] **********************************
changed: [10.200.14.144]
TASK [cluster-addon : metrics-server 배포 생성] *************************************
changed: [10.200.14.144]
TASK [cluster-addon : nfs-provisioner 구성 디렉터리 준비] *********************************
changed: [10.200.14.144]
TASK [cluster-addon : nfs-provisioner 배포 파일 준비] **********************************
changed: [10.200.14.144] => (item=nfs-provisioner.yaml)
changed: [10.200.14.144] => (item=test-pod.yaml)
TASK [cluster-addon : nfs-provisioner 배포 생성] ************************************
changed: [10.200.14.144]
TASK [cluster-addon : openebs-provisioner 구성 디렉터리 준비] *****************************
changed: [10.200.14.144]
TASK [cluster-addon : openebs-provisioner 배포 파일 준비] *****************************
changed: [10.200.14.144] => (item=openebs-provisioner.yaml)
TASK [cluster-addon : openebs-provisioner 배포 생성] *******************************
changed: [10.200.14.144]
TASK [cluster-addon : ingress-nginx 구성 디렉터리 준비] ***********************************
changed: [10.200.14.144]
TASK [cluster-addon : ingress-nginx 배포 파일 준비] ***********************************
changed: [10.200.14.144] => (item=ingress-nginx.yaml)
TASK [cluster-addon : ingress-nginx 배포 생성] *************************************
changed: [10.200.14.144]
PLAY RECAP *********************************************************************
10.200.14.144 : ok=110 changed=99 unreachable=0 failed=0 skipped=172 rescued=0 ignored=0
10.200.14.145 : ok=117 changed=106 unreachable=0 failed=0 skipped=199 rescued=0 ignored=0
10.200.14.146 : ok=93 changed=83 unreachable=0 failed=0 skipped=148 rescued=0 ignored=0
localhost : ok=33 changed=30 unreachable=0 failed=0 skipped=11 rescued=0 ignored=0
중요
-
반드시 모든 반환 정보가 성공해야 함, 그렇지 않으면 시스템을 초기화하고 설치를 다시 실행하세요
-
클러스터 정리: docker exec -it kubeasz ezctl destroy xxx, xxx는 클러스터 이름
-
노드를 재시작하여 잔여 가상 네트워크 카드, 라우팅 등의 정보를 정리
성공 반환 예시
PLAY RECAP *********************************************************************
10.200.14.144 : ok=110 changed=99 unreachable=0 failed=0 skipped=172 rescued=0 ignored=0
10.200.14.145 : ok=117 changed=106 unreachable=0 failed=0 skipped=199 rescued=0 ignored=0
10.200.14.146 : ok=93 changed=83 unreachable=0 failed=0 skipped=148 rescued=0 ignored=0
localhost : ok=33 changed=30 unreachable=0 failed=0 skipped=11 rescued=0 ignored=0
ezctl의 더 많은 매개변수는 ezctl을 실행하여 확인하세요. 실행이 안 될 경우 /etc/kubeasz 디렉터리로 이동하여 ./ezctl을 실행하여 확인하세요
4. 설치 확인¶
4.1 클러스터 구성 요소 상태¶
클러스터 구성 요소
모든 반환 결과에 ERROR가 없는지 확인
4.2 클러스터 노드 상태¶
클러스터 노드
모든 반환 결과 노드 상태가 Ready인지 확인
4.3 클러스터 기본 pod 상태¶
클러스터 초기 pod
[root@k8s-node01 ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx ingress-nginx-admission-create-sh5gb 0/1 Completed 0 22h
ingress-nginx ingress-nginx-admission-patch-dhsvl 0/1 Completed 0 22h
ingress-nginx ingress-nginx-controller-6d799ccc9c-rhgx5 1/1 Running 0 22h
kube-system calico-kube-controllers-5c8bb696bb-srlmd 1/1 Running 0 22h
kube-system calico-node-4rwfj 1/1 Running 0 22h
kube-system calico-node-lcm44 1/1 Running 0 22h
kube-system calico-node-nbc5w 1/1 Running 0 22h
kube-system calico-node-qfnw2 1/1 Running 0 22h
kube-system coredns-84b58f6b4-zgkvb 1/1 Running 0 22h
kube-system kubernetes-dashboard-5fc74cf5c6-kcpc7 1/1 Running 0 22h
kube-system metrics-server-69797698d4-nqfqf 1/1 Running 0 22h
kube-system node-local-dns-7w2kt 1/1 Running 0 22h
kube-system node-local-dns-gb4zp 1/1 Running 0 22h
kube-system node-local-dns-mw9pt 1/1 Running 0 22h
kube-system node-local-dns-zr5d9 1/1 Running 0 22h
모든 pod 상태가 Running이고 Ready인지 확인
4.4 클러스터 info 정보 확인
클러스터 정보
[root@k8s-node01 ~]# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
KubeDNSUpstream is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns-upstream:dns/proxy
kubernetes-dashboard is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
4.5 클러스터 리소스 사용 현황 확인
클러스터 리소스 사용 현황
클러스터 리소스 사용 현황이 정상적으로 반환되는지 확인
5. 자주 묻는 질문¶
팁
설치 확인 단계에서 kubectl: command not found가 표시되면 로그아웃 후 다시 SSH로 로그인하면 환경 변수가 적용됩니다
helm 명령어를 찾을 수 없다는 오류가 발생하면 로그아웃 후 다시 SSH로 서비스에 로그인하여 환경 변수를 확인하고 helm 명령어를 실행하여 실행 가능 여부를 확인하세요