본 제품에 대한 문서 세트는 편견 없는 언어를 사용하기 위해 노력합니다. 본 설명서 세트의 목적상, 편견 없는 언어는 나이, 장애, 성별, 인종 정체성, 민족 정체성, 성적 지향성, 사회 경제적 지위 및 교차성에 기초한 차별을 의미하지 않는 언어로 정의됩니다. 제품 소프트웨어의 사용자 인터페이스에서 하드코딩된 언어, RFP 설명서에 기초한 언어 또는 참조된 서드파티 제품에서 사용하는 언어로 인해 설명서에 예외가 있을 수 있습니다. 시스코에서 어떤 방식으로 포용적인 언어를 사용하고 있는지 자세히 알아보세요.
Cisco는 전 세계 사용자에게 다양한 언어로 지원 콘텐츠를 제공하기 위해 기계 번역 기술과 수작업 번역을 병행하여 이 문서를 번역했습니다. 아무리 품질이 높은 기계 번역이라도 전문 번역가의 번역 결과물만큼 정확하지는 않습니다. Cisco Systems, Inc.는 이 같은 번역에 대해 어떠한 책임도 지지 않으며 항상 원본 영문 문서(링크 제공됨)를 참조할 것을 권장합니다.
이 문서에서는 Google Cloud Platform(GCP)에서 로드 밸런서 역할을 하는 베이션 호스트가 포함된 3개의 마스터 노드와 4개의 작업자 노드를 포함하는 Kubernetes 클러스터의 구현에 대해 설명합니다.
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
이 문서의 정보는 다음을 기반으로 합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
Kube-apiserver:
i. Kubernetes 컨트롤 플레인의 프런트 엔드 역할을 하는 API를 제공합니다.
ii. 요청이 유효한지 여부를 결정하는 외부 및 내부 요청을 처리한 다음 처리합니다.
iii. API는 kubectl
CLI(Command Line Interface) 또는 기타 툴 kubeadm
및 REST 통화를 통해 이루어집니다.
Kube 스케줄러:
i. 이 구성 요소는 자동화된 워크플로 및 사용자 정의 조건에 따라 특정 노드에서 포드를 예약합니다.
Kube 컨트롤러 관리자:
i. Kubernetes 컨트롤러 관리자는 Kubernetes 클러스터의 상태를 모니터링하고 제어하는 제어 루프입니다.
ii. 클러스터의 현재 상태 및 클러스터 내의 객체에 대한 정보를 수신하고 클러스터 운영자가 원하는 상태로 클러스터를 이동하라는 명령을 전송합니다.
etcd:
i. 클러스터 상태 및 컨피그레이션에 대한 데이터가 포함된 키 값 데이터베이스입니다.
ii. Etcd는 내결함성이며 배포됩니다.
쿠벨렛:
i. 각 노드에는 kubelet
Kubernetes 컨트롤 플레인과 통신할 수 있는 소형 애플리케이션입니다.
ii. kubelet
pod 컨피그레이션에 지정된 컨테이너가 특정 노드에서 실행되는지 확인하고 그 라이프사이클을 관리합니다.
iii. 컨트롤 플레인에 의해 명령된 작업을 실행합니다.
Kube-proxy:
i. 모든 컴퓨팅 노드에는 kube-proxy
Kubernetes 네트워킹 서비스를 지원하는 네트워크 프록시
ii. 클러스터 외부 및 내부의 모든 네트워크 통신을 처리하고 운영 체제의 패킷 필터링 레이어에 트래픽 또는 응답을 전달합니다.
포드:
i. Pod는 단일 애플리케이션 인스턴스 역할을 하며 Kubernetes의 개체 모델에서 가장 작은 단위로 간주됩니다.
요새 호스트:
i. 컴퓨터는 일반적으로 프록시 서버 또는 로드 밸런서와 같은 단일 애플리케이션 또는 프로세스를 호스팅하며, 컴퓨터에 대한 위협을 줄이기 위해 다른 모든 서비스가 제거되거나 제한됩니다.
클러스터:
참고: VM을 프로비저닝하기 전에 GCP에 VPC를 구성합니다. GCP의 VPC를 참조합니다.
GCP에서 GCP 마켓플레이스에서 Centos7을 프로비저닝합니다.
클릭 Launch
.
가장 가까운 연결성에 따라 지역을 선택합니다. 이 Lab에서는 해당 지역이 뭄바이로 구성됩니다.
시스템 컨피그레이션은 범용 E2 시리즈 및 시스템 유형입니다 e2-standard-16 (16 vCPU, 64 GB memory)
.
선택 Allow default access
방화벽의 경우 Allow HTTP traffic
및 Allow HTTPS traffic
.
클릭 Create
.
마찬가지로, 여기에 표시된 대로 8개의 노드를 생성합니다.
개인 IP:
GCP에서는 사설 및 공용 IP가 자동으로 할당됩니다.
master-1 = 10.160.x.9
master-2 = 10.160.x.10
master-3 = 10.160.x.11
worker-1 = 10.160.x.12
worker-2 = 10.160.x.13
worker-3 = 10.160.x.14
worker-4 = 10.160.x.16
bastion = 10.160.x.19
모든 노드(마스터, 작업자, 보스턴)에서 다음을 수행합니다.
1. Linux 서버에서 필요한 방화벽 포트를 열고 보안 구성을 구성합니다.
멀티 마스터 구축의 마스터 노드에서 다음을 수행합니다.
Kubernetes etcd server client API: 2379/tcp, 2380/tcp
Kubernetes API server: 6443/tcp
참고: 또한 GCP 방화벽의 포트가 허용되는지 확인합니다.
2. 필요한 네트워크 설정(로컬 DNS, 호스트 이름, NTP)을 구성합니다.
요새 서버:
1. HA 프록시를 설정합니다.
2. 프런트 엔드 및 백엔드 서버 구성을 추가합니다. haproxy.conf
파일을 클릭합니다.
3. 를 다시 시작합니다 haproxy
서비스.
마스터 및 작업자 노드에 대한 일반적인 단계:
1. docker를 설치하고 구성합니다.
2. Kubernetes 설치 및 구성
마스터 노드에서만:
1. 새 Kubernetes 클러스터를 초기화합니다(kubeadm init
).
2. 설치 Calico
네트워크 플러그인(특히 마스터 노드의 코어 DNS 서비스에 사용됨)
3. 마스터 노드를 마스터 노드와 조인하려면 이 명령을 사용합니다.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
\ --control-plane --certificate-key
4. 클러스터 정보 검증 kubectl get nodes
명령을 실행합니다.
작업자 노드에서만:
1. 이 명령을 사용하여 작업자 노드를 마스터 노드에 조인합니다.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
2. 가입에 성공하면 이 명령을 사용하여 마스터 노드의 클러스터 정보를 확인합니다 kubectl get nodes
.
1. 이 명령으로 알 수 없는 경우 루트 비밀번호를 변경합니다.
passwd
2. 필요한 경우 이 명령을 사용하여 호스트 이름을 변경합니다.
hostnamectl set-hostname
3. 로컬 DNS를 구성합니다.
cat > /etc/hosts <
4. 이 명령을 사용하여 NTP 서비스에 대한 시간 기록을 활성화합니다.
systemctl enable --now chronyd
2. 이 명령으로 상태를 확인합니다.
systemctl status chronyd
3. 이 명령을 사용하여 NTP 소스를 확인합니다.
chronyc sources -v
요새 서버
1단계. 업데이트를 확인합니다.
sudo yum check-update
2단계. 최신 버전이 아닌 경우 업데이트를 설치합니다.
yum update -y
3단계. yum 유틸리티를 설치합니다.
yum -y install yum-utils
4단계. Haproxy 패키지를 설치합니다.
yum install haproxy -y
5단계. 이 컨피그레이션을 기본값인 /etc/haproxy/haproxy.cfg
:
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
6단계. 이 명령처럼 보이도록 구성 파일을 확인합니다 vi /etc/haproxy/haproxy.cfg
:
---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
7단계. Haproxy 상태를 확인합니다.
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
가능한 오류
1. HAProxy 서비스는 의 컨피그레이션을 변경한 후 실패 상태입니다. haproxy.cfg
. 예:
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2022-10-26 08:29:23 UTC; 3min 44s ago
Process: 30951 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (code=exited, status=1/FAILURE)
Main PID: 30951 (code=exited, status=1/FAILURE)
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [ALERT] 298/082923 (30952) : Starting frontend kubernetes: cannot bind socket [10.160.x.19:6443].
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: exit, haproxy RC=1.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service: main process exited, code=exited, status=1/FAILURE.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Unit haproxy.service entered failed state.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
해결
1. Set the boolean value for haproxy_connect_any to true.
2. Restart the haproxy service.
3. Verify the status.
실행:
[root@k8-loadbalancer vapadala]# setsebool -P haproxy_connect_any=1
[root@k8-loadbalancer vapadala]# systemctl restart haproxy
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
마스터 및 작업자 노드에 Docker 설치
1단계. 업데이트를 확인합니다.
sudo yum check-update
2단계. 최신 버전이 아닌 경우 업데이트를 설치합니다.
yum update -y
3단계. yum 유틸리티를 설치합니다.
yum -y install yum-utils
4단계. Docker를 설치합니다.
curl -fsSL https://get.docker.com/ | sh
5단계. Docker를 활성화합니다.
systemctl enable --now docker
6단계. Docker 서비스를 시작합니다.
sudo systemctl start docker
7단계. Docker 상태를 확인합니다.
sudo systemctl status docker
성과:
[root@kube-master1 vapadala]# sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-10-25 10:44:28 UTC; 40s ago
Docs: https://docs.docker.com
Main PID: 4275 (dockerd)
Tasks: 21
Memory: 35.2M
CGroup: /system.slice/docker.service
└─4275 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128233809Z" level=info msg="scheme \"unix\" not registered, fallback to defaul...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128251910Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:/...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128260953Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc.
Oct 25 10:44:27 kube-master1 dockerd[4275]: time="2022-10-25T10:44:27.920336293Z" level=info msg="Loading containers: start."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.104357517Z" level=info msg="Default bridge (docker0) is assigned with an IP ad... address".
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.163830549Z" level=info msg="Loading containers: done."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182833703Z" level=info msg="Docker daemon" commit=03df974 graphdriver(s)=overl...=20.10.20.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182939545Z" level=info msg="Daemon has completed initialization".
Oct 25 10:44:28 kube-master1 systemd[1]: Started Docker Application Container Engine.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.208492147Z" level=info msg="API listen on /var/run/docker.sock".
Hint: Some lines were ellipsized, use -l to show in full.
[root@kube-master1 vapadala]#
마스터 및 작업자 노드에 Kubernetes 설치
1단계. Kubernetes 저장소를 추가합니다.
cat <
"gpgcheck = 0" will not verify the authenticity of the package if unsigned. Production environment it is recommended to set "gpgcheck = 1"
2단계. 사용 안 함 SELinux
.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
3단계. Install Kubernetes
.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
4단계. 사용 Kubelet
.
sudo systemctl enable --now kubelet
5단계. 구성 Pod Network
.
kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
6단계. 토큰 생성:
마스터(컨트롤 플레인) 및 작업자 노드에 대한 출력입니다.
마스터 노드
토큰: Kubernetes 컨트롤 플레인이 초기화되었습니다!
클러스터를 사용하려면 이 명령을 일반 사용자로 실행합니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
또는 루트 사용자인 경우 를 실행할 수 있습니다.
export KUBECONFIG=/etc/kubernetes/admin.conf
이제 Pod 네트워크를 클러스터에 구축할 수 있습니다.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
이제 이 명령을 실행하는 컨트롤 플레인 노드 또는 마스터 노드를 루트로 사용할 수 있습니다.
참조: kubeadm 가입 워크플로
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
참고: 인증서 키는 클러스터에 민감한 데이터에 대한 액세스를 제공하므로 비밀로 유지하십시오!
보호 수단으로 업로드된 인증서는 2시간 후에 삭제됩니다. 필요한 경우 사용할 수 있습니다.
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
그런 다음 원하는 수의 작업자 노드에 조인하고 각 노드에서 이를 루트로 실행할 수 있습니다.
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
7단계. 코어 DNS 서비스를 확인합니다.
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-59697b644f-v2f22 1/1 Running 0 32m
kube-system calico-node-gdwr6 1/1 Running 0 5m54s
kube-system calico-node-zszbc 1/1 Running 11 (5m22s ago) 32m
kube-system calico-typha-6944f58589-q9jxf 1/1 Running 0 32m
kube-system coredns-565d847f94-cwgj8 1/1 Running 0 58m
kube-system coredns-565d847f94-tttpq 1/1 Running 0 58m
kube-system etcd-kube-master1 1/1 Running 0 59m
kube-system kube-apiserver-kube-master1 1/1 Running 0 59m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 59m
kube-system kube-proxy-flgvq 1/1 Running 0 5m54s
kube-system kube-proxy-hf5qv 1/1 Running 0 58m
kube-system kube-scheduler-kube-master1 1/1 Running 0 59m
[root@kube-master1 vapadala]#
8단계. 마스터 노드의 상태를 확인합니다.
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 Ready control-plane 11m v1.25.3
여러 마스터 노드를 조인하려면 이 조인 명령이 마스터 노드에서 실행됩니다.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
토큰 생성 시 발생 가능한 오류
오차 CRI
[root@kube-master1 vapadala]# kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
[init] Using Kubernetes version: v1.25.3
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2022-10-25T08:56:42Z" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\"", error: exit status 1.
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
오류 CRI 해결
1단계. config.toml 파일을 제거하고 contained를 다시 시작합니다.
rm -rf /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
2단계. 설치 포함됨:
이 명령을 사용하여 공식 Docker 저장소에서 containerd.io 패키지를 설치합니다.
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo.
yum install -y containerd.io
3단계. Containered를 구성합니다.
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
4단계. 다시 시작 포함됨:
systemctl restart containerd
오류 FileContent - proc-sys-net-ipv4-ip_forward
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
오류 파일 내용 - proc-sys-net-ipv4-ip_forward Resolution
ip_forward 값을 1로 설정합니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
코어 DNS 서비스가 실행되지 않음
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 NotReady control-plane 11m v1.25.3
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-cwgj8 0/1 Pending 0 12m
kube-system coredns-565d847f94-tttpq 0/1 Pending 0 12m
kube-system etcd-kube-master1 1/1 Running 0 12m
kube-system kube-apiserver-kube-master1 1/1 Running 0 12m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 12m
kube-system kube-proxy-hf5qv 1/1 Running 0 12m
kube-system kube-scheduler-kube-master1 1/1 Running 0 12m
[root@kube-master1 vapadala]#
해결
코어 DNS가 보류 중입니다. 이는 네트워킹에 문제가 있음을 나타냅니다. 따라서 Calico를 설치해야 합니다.
참조: Calico
다음 두 명령을 실행합니다.
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/calico-typha.yaml -o calico.yaml
kubectl apply -f calico.yaml
작업자 노드
마스터에서 토큰을 가져올 때 작업자 노드에서 다음을 수행합니다.
1단계. kubelet 서비스를 활성화합니다.
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart kubelet
systemctl enable kubelet.service
2단계. 이 join 명령으로 모든 작업자 노드를 마스터 노드와 조인합니다.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
3단계. 파일 또는 포트와 관련된 오류가 발생하면 이 명령을 사용하여 kubeadm을 재설정합니다.
kubeadm reset
재설정한 후 마스터 노드의 토큰을 입력합니다.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
최종 출력
이제 클러스터가 구성되었습니다. kubectl get node 명령을 사용하여 확인하십시오.
참고: 클러스터 형성 시 마스터 노드의 컨트롤만 구성됩니다. 베이션 호스트는 클러스터의 모든 Kube를 모니터링하기 위한 중앙 서버로 구성되지 않았습니다.
개정 | 게시 날짜 | 의견 |
---|---|---|
1.0 |
14-Dec-2022 |
최초 릴리스 |