소개
이 문서에서는 Cisco IKS(Intersight™ Kubernetes Service)를 사용하여 SaaS(Cisco Intersight)에서 프로덕션 등급의 Kubernetes 클러스터를 프로비저닝하기 위한 컨피그레이션에 대해 설명합니다.
배경 정보
최근 Kubernetes는 사실상 컨테이너 관리 툴로 자리 잡았습니다. 조직에서 Containerized 솔루션으로 애플리케이션 현대화에 더 많은 투자를 하는 경향이 있기 때문입니다. Kubernetes를 통해 개발 팀은 컨테이너화된 애플리케이션을 쉽게 배포, 관리 및 확장할 수 있으므로 지속적인 전송 파이프라인에서 혁신을 보다 쉽게 이용할 수 있습니다.
그러나 Kubernetes는 설치 및 구성에 시간과 기술적 전문성이 필요하기 때문에 운영상의 문제가 발생합니다.
Kubernetes와 필요한 다양한 소프트웨어 구성 요소를 설치하고, 클러스터를 만들고, 스토리지, 네트워킹 및 보안을 구성하고, 운영(예: 중요 보안 버그의 업그레이드, 업데이트 및 패치)을 수행하려면 막대한 인적 투자가 지속적으로 필요합니다.
어디서나 일관성 있는 생산 등급 Kubernetes를 관리하기 위한 턴키 SaaS 솔루션인 IKS를 입력합니다. IKS의 기능에 대한 자세한 내용은 여기 링크를 참조하십시오.
솔루션 개요
이 문서에서는 VMware ESXi 및 vCenter를 실행하는 온프레미스 인프라와 완벽하게 통합되는 IKS의 기능을 보여 주기 위한 것입니다.
몇 번의 클릭으로 VMware 인프라에 프로덕션 등급의 Kubernetes 클러스터를 구축할 수 있습니다.
그러나 이를 위해서는 온프레미스 vCenter를 '대상 청구'라고 하는 Intersight와 통합해야 합니다. 여기서 vCenter가 대상입니다.
Cisco Intersight에 엔드포인트 대상을 추가하는 데 도움이 되는 Cisco Intersight Assist Virtual Appliance가 필요합니다. Cisco 공식 웹 사이트에서 제공되는 부트스트랩 OVA를 사용하여 Intersight Assist를 설치할 수 있습니다.
이 문서의 범위를 제한하기 위해 Cisco Intersight Assist Virtual Appliance 설치에 초점을 맞추지 않겠습니다. 하지만 여기서 프로세스를 살펴볼 수 있습니다
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- Intersight 계정: 유효한 Cisco ID와 Intersight 계정이 필요합니다.
Cisco ID가 없는 경우 Cisco 웹 사이트에서 Cisco ID를 생성할 수 있습니다. 그런 다음 Intersight에서 Create an Account(어카운트 생성) 링크를 클릭합니다.
- Cisco Intersight Assist: Cisco Intersight Assist를 통해 vCenter/ESXi를 엔드포인트 대상으로 Cisco Intersight에 추가할 수 있습니다.
- 연결: 사용자 환경에서 HTTP/S 프록시를 지원하는 경우 이를 사용하여 Cisco Intersight Assist Appliance를 인터넷에 연결할 수 있습니다. 또는 인터사이트 URL에 대한 포트를 열어야 합니다. 자세한 네트워크 연결 요구 사항은 이 링크를 확인하십시오.
- Intersight에서 이를 청구할 수 있는 vCenter 자격 증명
사용되는 구성 요소
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
가정
Cisco Intersight Appliance 구축은 이 문서의 범위에 포함되지 않습니다.
이미 유효한 Intersight 어카운트가 있으며, 온프레미스 vCenter/Esxi를 성공적으로 청구했다고 가정합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
설정
1단계. 정책 구성
정책을 사용하면 컨피그레이션을 재사용 가능한 템플릿으로 추상화하므로 관리를 간소화할 수 있습니다.
구성해야 하는 몇 가지 정책이 아래에 나와 있습니다. 이러한 모든 정책은 Intersight의 Configure(구성) >> Policies & Configure(정책 및 구성) >> Pools(풀) 섹션에서 생성됩니다.
아래에 제시된 각 스크린샷 상단에서 정책의 경로를 확인할 수 있습니다.
이 IP 풀은 ESXi 호스트에서 실행될 때 제어 및 작업자 노드 가상 머신의 IP 주소에 사용됩니다.

여기서는 Kubernetes 클러스터 내의 내부 네트워킹을 위한 Pod and Services Network CIDR을 정의합니다.
서비스 및 네트워크 CIDR
이 정책은 NTP 및 DNS 컨피그레이션을 정의합니다.
NTP 및 DNS 컨피그레이션
이 정책을 사용하면 docker 컨테이너 런타임에 대한 프록시 컨피그레이션을 정의할 수 있습니다.
Docker에 대한 프록시 컨피그레이션
이 정책에서는 마스터 및 작업자 노드로 구축된 가상 머신에 필요한 컨피그레이션을 정의합니다.
사용된 VM 컨피그레이션
2단계. 프로파일 구성
위 정책을 생성한 후에는 이를 프로필에 바인딩하여 구축할 수 있습니다.
정책 및 프로파일을 사용하여 컨피그레이션을 구축하면 컨피그레이션 레이어가 빠르게 반복적으로 구축될 수 있도록 추상화됩니다.
이 프로파일을 복사하고 몇 분 내에 기본 정책에 대한 수정이 거의 없는 새 프로파일을 하나 이상의 Kubernetes 클러스터에 생성할 수 있습니다. 수동 프로세스는 매우 짧은 시간 내에 수행됩니다.
Name(이름)에 GIve를 입력하고 Tags(태그)를 설정합니다.
이름 및 태그가 있는 프로필 컨피그레이션
풀, 노드 OS, 네트워크 CIDR 정책을 설정합니다. 또한 사용자 ID 및 SSH 키(공개)를 구성해야 합니다.
해당 개인 키는 마스터 및 작업자 노드에 ssh하는 데 사용됩니다.
정책이 할당된 프로필 컨피그레이션
컨트롤 플레인을 구성합니다. 컨트롤 플레인에서 필요한 마스터 노드의 수를 정의할 수 있습니다.
마스터 노드 컨피그레이션
작업자 노드를 구성합니다. 애플리케이션 요구 사항에 따라 작업자 노드를 확장하거나 축소할 수 있습니다.
작업자 노드 구성
추가 기능을 구성합니다. 이제 Kubernetes Dashboard(Kubernetes 대시보드) 및 Graffana with Prometheus 모니터링을 자동으로 구축할 수 있습니다.
향후 IKS를 사용하여 자동으로 구축할 수 있는 추가 기능을 추가할 수 있습니다.
추가 기능 추가(있는 경우)
Summary(요약)를 선택하고 Deploy(구축)를 클릭합니다.
프로필 생성 요약 화면
다음을 확인합니다.
설정이 올바르게 작동하는지 확인하려면 이 섹션을 활용하십시오.
오른쪽 상단에서 구축의 진행 상황을 추적할 수 있습니다.
IKS GUI를 사용하여 확인
구축이 진행되면 vCenter에서 Kubernetes Master 및 Worker Node가 표시되는 것을 확인할 수 있습니다.
vCenter에 IKS 클러스터 도입 예정
구축에 대한 자세한 단계를 확인해야 하는 경우, 실행 단계로 자세히 드릴할 수 있습니다.
프로파일 생성 실행
Kubernetes 클러스터에 연결
다음과 같은 방법으로 Kubernetes 클러스터에 연결할 수 있습니다.
Operate(운영) > Kubernetes(Kubernetes) > 맨 오른쪽에 있는 Select(선택)에서 다운로드할 수 있는 KubeConfig 파일을 사용합니다.
이 클러스터에 액세스하려는 관리 워크스테이션에 KubeCtl이 설치되어 있어야 합니다.
IKS에서 KubeConfig 파일 다운로드
또한 구축 시 자격 증명 및 개인 키가 구성된 Putty와 같은 SSH 애플리케이션을 사용하여 마스터 노드에 직접 SSH를 사용할 수 있습니다
'Kubernetes Dashboard'를 추가 기능으로 구축하는 경우, 이를 사용하여 GUI를 사용하여 애플리케이션을 직접 구축할 수도 있습니다.
자세한 내용을 확인하려면 여기의 'Kubernetes 클러스터 액세스' 섹션을 참조하십시오.
CLI로 확인
kubeCtl을 사용하여 Kubernetes 클러스터에 연결할 수 있으면 다음 명령을 사용하여 클러스터에 모든 구성 요소가 설치되어 실행 중인지 확인할 수 있습니다.
클러스터의 노드가 '준비' 상태인지 확인합니다.
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubek8scl1-caaskubew-6ba6bf794e Ready 6d4h v1.19.5
kubek8scl1-caaskubew-caa202993e Ready 6d4h v1.19.5
kubek8scl1-controlpl-b8a50f8235 Ready master 6d4h v1.19.5
클러스터에 필수 구성 요소를 설치할 때 생성된 Pod의 상태를 확인합니다.
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ kubectl get pod -n iks | grep apply-
apply-ccp-monitor-2b7tx 0/1 Completed 0 6d3h
apply-cloud-provider-qczsj 0/1 Completed 0 6d3h
apply-cni-g7dcc 0/1 Completed 0 6d3h
apply-essential-cert-ca-jwdtk 0/1 Completed 0 6d3h
apply-essential-cert-manager-bg5fj 0/1 Completed 0 6d3h
apply-essential-metallb-nzj7h 0/1 Completed 0 6d3h
apply-essential-nginx-ingress-8qrnq 0/1 Completed 0 6d3h
apply-essential-registry-f5wn6 0/1 Completed 0 6d3h
apply-essential-vsphere-csi-tjfnq 0/1 Completed 0 6d3h
apply-kubernetes-dashboard-rslt4 0/1 Completed 0 6d3h
로컬에서 실행 중인 키를 관리하고 추가 기능을 설치하는 ccp-helm-operator pod의 상태를 확인합니다.
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ kubectl get helmcharts.helm.ccp.----.com -A
NAMESPACE NAME STATUS VERSION INSTALLED VERSION SYNCED
iks ccp-monitor INSTALLED 0.2.61-helm3
iks essential-cert-ca INSTALLED 0.1.1-helm3
iks essential-cert-manager INSTALLED v1.0.2-cisco1-helm3
iks essential-metallb INSTALLED 0.12.0-cisco3-helm3
iks essential-nginx-ingress INSTALLED 2.10.0-cisco2-helm3
iks essential-registry INSTALLED 1.8.3-cisco10-helm3
iks essential-vsphere-csi INSTALLED 1.0.1-helm3
iks kubernetes-dashboard INSTALLED 3.0.2-cisco3-helm3
iks vsphere-cpi INSTALLED 0.1.3-helm3
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ helm ls -A
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iksadmin/.kube/config
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
addon-operator iks 1 2021-11-05 07:45:15.44180913 +0000 UTC deployed ccp-helm-operator-9.1.0-alpha.44.g415a48c4be1.0
ccp-monitor iks 1 2021-11-05 08:23:11.309694887 +0000 UTC deployed ccp-monitor-0.2.61-helm3
essential-cert-ca iks 1 2021-11-05 07:55:04.409542885 +0000 UTC deployed cert-ca-0.1.1-helm3 0.1.0
essential-cert-manager iks 1 2021-11-05 07:54:41.433212634 +0000 UTC deployed cert-manager-v1.0.2-cisco1-helm3 v1.0.2
essential-metallb iks 1 2021-11-05 07:54:48.799226547 +0000 UTC deployed metallb-0.12.0-cisco3-helm3 0.8.1
essential-nginx-ingress iks 1 2021-11-05 07:54:46.762865131 +0000 UTC deployed ingress-nginx-2.10.0-cisco2-helm3 0.33.0
essential-registry iks 1 2021-11-05 07:54:36.734982103 +0000 UTC deployed docker-registry-1.8.3-cisco10-helm3 2.7.1
essential-vsphere-csi kube-system 1 2021-11-05 07:54:58.168305242 +0000 UTC deployed vsphere-csi-1.0.1-helm3 v2.0.0
kubernetes-dashboard iks 1 2021-11-05 07:55:10.197905183 +0000 UTC deployed kubernetes-dashboard-3.0.2-cisco3-helm3 2.1.0
vsphere-cpi kube-system 1 2021-11-05 07:54:38.292088943 +0000 UTC deployed vsphere-cpi-0.1.3-helm3 1.1.0
모든 IKS 테넌트 클러스터에서 기본적으로 설치된 필수(코어) 추가 기능을 관리하는 필수-* 포드의 상태를 확인합니다.
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ kubectl get pod -n iks | grep ^essential-
essential-cert-manager-6bb7d776d-tpkhj 1/1 Running 0 6d4h
essential-cert-manager-cainjector-549c8f74c-x5sjp 1/1 Running 0 6d4h
essential-cert-manager-webhook-76f596b686-drf79 1/1 Running 0 6d4h
essential-metallb-controller-6557847d57-djs9b 1/1 Running 0 6d4h
essential-metallb-speaker-7t54v 1/1 Running 0 6d4h
essential-metallb-speaker-ggmbn 1/1 Running 0 6d4h
essential-metallb-speaker-mwmfg 1/1 Running 0 6d4h
essential-nginx-ingress-ingress-nginx-controller-k2hsw 1/1 Running 0 6d4h
essential-nginx-ingress-ingress-nginx-controller-kfkm9 1/1 Running 0 6d4h
essential-nginx-ingress-ingress-nginx-defaultbackend-695fbj4mnd 1/1 Running 0 6d4h
essential-registry-docker-registry-75b84457f4-4fmlh 1/1 Running 0 6d4h
IKS 네임스페이스에 배포된 서비스 및 로드 밸런서의 상태를 확인합니다.
iksadmin@kubek8scl1-controlpl-b8a50f8235:~$ kubectl get svc -n iks
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ccp-monitor-grafana ClusterIP 192.168.23.161 80/TCP 6d3h
ccp-monitor-prometheus-alertmanager ClusterIP 192.168.23.70 80/TCP 6d3h
ccp-monitor-prometheus-kube-state-metrics ClusterIP None 80/TCP 6d3h
ccp-monitor-prometheus-node-exporter ClusterIP None 9100/TCP 6d3h
ccp-monitor-prometheus-pushgateway ClusterIP 192.168.23.130 9091/TCP 6d3h
ccp-monitor-prometheus-server ClusterIP 192.168.23.95 443/TCP 6d3h
essential-cert-manager ClusterIP 192.168.23.178 9402/TCP 6d4h
essential-cert-manager-webhook ClusterIP 192.168.23.121 443/TCP 6d4h
essential-nginx-ingress-ingress-nginx-controller LoadBalancer 192.168.23.26 192.168.10.11 80:31121/TCP,443:31753/TCP 6d4h
essential-nginx-ingress-ingress-nginx-defaultbackend ClusterIP 192.168.23.205 80/TCP 6d4h
essential-registry-docker-registry ClusterIP 192.168.23.12 443/TCP 6d4h
kubernetes-dashboard ClusterIP 192.168.23.203 443/TCP 6d4h
문제 해결
이 섹션에서는 설정 문제 해결에 사용할 수 있는 정보를 제공합니다.
특정 Pod가 표시되지 않는 경우 이 명령을 사용하여 원인을 드릴다운할 수 있습니다.
Syntax : kubectl describe pod -n
Example :
kubectl describe pod vsphere-csi-controller-7d56dc7c8-qgbhw -n kube-system
Name: vsphere-csi-controller-7d56dc7c8-qgbhw
Namespace: kube-system
Priority: 0
Node: kubek8scl1-controlpl-eb44cf1bf3/192.168.58.11
Start Time: Tue, 28 Sep 2021 02:39:41 +0000
Labels: app=vsphere-csi-controller
pod-template-hash=7d56dc7c8
role=vsphere-csi
Annotations:
Status: Running
IP: 192.168.58.11
IPs:
IP: 192.168.58.11
Controlled By: ReplicaSet/vsphere-csi-controller-7d56dc7c8
Containers:
csi-attacher:
Container ID: docker://60002693136d00f3b61237304a1fbc033df92f86dc1352965328fe3c4d264fdb
Image: registry.ci.x----x.com/cpsg_kaas-images/quay.io/k8scsi/csi-attacher:v2.0.0
Image ID: docker-pullable://registry.ci.x------x.com/cpsg_kaas-images/quay.io/k8scsi/csi-attacher@sha256:71e2b9b5b8c52d789ef89ba901c8fba270fa623789a988c77c52ebb0257bf723
Port:
Host Port:
Args:
--v=4
--timeout=300s
--csi-address=$(ADDRESS)
--leader-election
State: Running
Started: Thu, 30 Sep 2021 05:44:11 +0000
Last State: Terminated
Reason: Error
Message: Lost connection to CSI driver, exiting
Exit Code: 255
Started: Thu, 30 Sep 2021 05:38:20 +0000
Finished: Thu, 30 Sep 2021 05:39:06 +0000
Ready: True
Restart Count: 531
X----------------------- Log Text Omitted ---------X----------------------X--------------------X
관련 정보