Nutanix Kubernetes Engine(NKE)で作成した Kubernetes クラスタ(NKE クラスタ)の仮想マシンに、SSH で接続してみます。
今回の内容です。
今回の環境
NKE クラスタは、下記のような手順で作成してあります。
下記の投稿で確認した NKE クラスタ(nke-02)に SSH 接続してみます。
NKE クラスタの仮想マシンへの SSH
NKE クラスタの、制御プレーン ノードの仮想マシンに SSH 接続してみます。
Prism Central の「Kubernetes Management」→「Clusters」画面で、NKE クラスタの名前(nke-02)をクリックします。
「API Endpoint」の IP アドレスを確認しておきます。
「SSH Access」をクリックします。
「Copy the command to clipboard」をクリックすると、OS のクリップボードに長いコマンドラインが格納されます。これは、SSH 用スクリプトが Base64 エンコードされたものです。
ちなみに「Downloads」リンクをクリックすると、SSH 用スクリプトをダウンロードできます。ファイル名はデフォルトだと「<NKE クラスタ名>-ssh-access.sh」(今回の例では nke-02-ssh-access.sh)になります。
クリップボードのコマンドラインを、ssh コマンドが実行できる Linux などに貼り付けて実行すると・・・
「Enter KARBON VM IP:」と表示されるので、さきほど確認した API Endpoint か NKE 仮想マシンの IP アドレスを入力すると、nutanix ユーザとして SSH ログインできます。
初回のみ、ホスト キーの確認入力(yes)が必要です。
仮想マシンの様子
Control Plane 仮想マシンに、nutanix ユーザでログインしています。
[nutanix@nke-02-55946c-master-0 ~]$ id uid=1000(nutanix) gid=1000(nutanix) groups=1000(nutanix),10(wheel),1001(kubectl_group)
ディストリビューションは、CentOS 7.9 です。
[nutanix@nke-02-55946c-master-0 ~]$ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)
kubectl は、デフォルトでインストールされています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl version --short Flag --short has been deprecated, and will be removed in the future. The --short output will become the default. Client Version: v1.26.8 Kustomize Version: v4.5.7 Server Version: v1.26.8
Kubernetes クラスタの様子
NKE クラスタのノードです。Control Plane と Worker が1ノードずつあり、etcd ノードは Kubernetes クラスタには含まれません。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION nke-02-55946c-master-0 Ready control-plane,master 19h v1.26.8 nke-02-55946c-worker-0 Ready node 19h v1.26.8
Nutanix ならではのリソースをインストールする、ntnx-system Namespace が作成されています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get ns NAME STATUS AGE default Active 19h kube-node-lease Active 19h kube-public Active 19h kube-system Active 19h ntnx-system Active 19h
下記のような Pod が起動されています。CNI は、NKE クラスタを作成するウィザードで指定したとおり calico がインストールされています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-d9df5649-8xh2g 1/1 Running 0 19h kube-system calico-node-7vcrz 1/1 Running 0 19h kube-system calico-node-px8t5 1/1 Running 0 19h kube-system calico-typha-787bcdb57c-2r6zf 1/1 Running 0 19h kube-system coredns-5d88b659b9-p5vdg 1/1 Running 0 19h kube-system kube-apiserver-nke-02-55946c-master-0 3/3 Running 0 20h kube-system kube-proxy-ds-rmhj7 1/1 Running 0 19h kube-system kube-proxy-ds-vrnf4 1/1 Running 0 19h ntnx-system alertmanager-main-0 2/2 Running 1 (19h ago) 19h ntnx-system blackbox-exporter-7954b6f4db-5lzvs 3/3 Running 0 19h ntnx-system csi-snapshot-controller-7f645c5559-wtdg2 1/1 Running 0 19h ntnx-system csi-snapshot-webhook-7f8558477f-9dzq9 1/1 Running 0 19h ntnx-system fluent-bit-4gtwt 1/1 Running 0 19h ntnx-system fluent-bit-bjb7l 1/1 Running 0 19h ntnx-system kube-state-metrics-d459f9d68-pxv5d 3/3 Running 0 19h ntnx-system kubernetes-events-printer-74464fd469-hlfxl 1/1 Running 0 19h ntnx-system node-exporter-mj9kk 2/2 Running 0 19h ntnx-system node-exporter-p4nvn 2/2 Running 0 19h ntnx-system nutanix-csi-controller-6f9ff6cd88-bwv7b 5/5 Running 0 19h ntnx-system nutanix-csi-node-w8fzm 3/3 Running 0 19h ntnx-system prometheus-adapter-6b6d856c7-mkkrp 1/1 Running 0 19h ntnx-system prometheus-k8s-0 2/2 Running 0 19h ntnx-system prometheus-operator-557c85cd6b-22xqz 2/2 Running 0 19h
作成されている Deployment リソースです。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get deployment -A NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system calico-kube-controllers 1/1 1 1 19h kube-system calico-typha 1/1 1 1 19h kube-system coredns 1/1 1 1 19h ntnx-system blackbox-exporter 1/1 1 1 19h ntnx-system csi-snapshot-controller 1/1 1 1 19h ntnx-system csi-snapshot-webhook 1/1 1 1 19h ntnx-system kube-state-metrics 1/1 1 1 19h ntnx-system kubernetes-events-printer 1/1 1 1 19h ntnx-system nutanix-csi-controller 1/1 1 1 19h ntnx-system prometheus-adapter 1/1 1 1 19h ntnx-system prometheus-operator 1/1 1 1 19h
作成されている DaemonSet リソースです。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get daemonset -A NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-system calico-node 2 2 2 2 2 kubernetes.io/os=linux 20h kube-system kube-proxy-ds 2 2 2 2 2 <none> 20h ntnx-system fluent-bit 2 2 2 2 2 <none> 20h ntnx-system node-exporter 2 2 2 2 2 kubernetes.io/os=linux 20h ntnx-system nutanix-csi-node 1 1 1 1 1 <none> 20h
Service リソースです。LoadBalancer Type の Service を作成するには、MetalLB などを追加インストールする必要があります。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get service -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 172.19.0.1 <none> 443/TCP 20h kube-system calico-typha ClusterIP 172.19.250.45 <none> 5473/TCP,9091/TCP 20h kube-system etcd ClusterIP None <none> 2379/TCP 19h kube-system kube-controller-manager-prometheus-discovery ClusterIP None <none> 10257/TCP 19h kube-system kube-dns ClusterIP 172.19.0.10 <none> 53/UDP,53/TCP,9153/TCP 19h kube-system kube-scheduler-prometheus-discovery ClusterIP None <none> 10259/TCP 19h kube-system kubelet ClusterIP None <none> 10250/TCP,10255/TCP,4194/TCP 19h ntnx-system alertmanager-main ClusterIP 172.19.246.83 <none> 9093/TCP,8080/TCP 19h ntnx-system alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 19h ntnx-system blackbox-exporter ClusterIP 172.19.57.245 <none> 9115/TCP,19115/TCP 19h ntnx-system csi-metrics-service ClusterIP 172.19.219.14 <none> 9809/TCP,9810/TCP 19h ntnx-system csi-snapshot-webhook ClusterIP 172.19.82.120 <none> 443/TCP 19h ntnx-system kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 19h ntnx-system node-exporter ClusterIP None <none> 9100/TCP 19h ntnx-system nutanix-csi-metrics ClusterIP 172.19.192.107 <none> 9809/TCP,9810/TCP 19h ntnx-system prometheus-adapter ClusterIP 172.19.188.147 <none> 443/TCP 19h ntnx-system prometheus-k8s ClusterIP 172.19.212.127 <none> 9090/TCP,8080/TCP 19h ntnx-system prometheus-operated ClusterIP None <none> 9090/TCP 19h ntnx-system prometheus-operator ClusterIP None <none> 8443/TCP 19h
Nutanix CSI Driver が、デフォルトでインストールされています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get csidrivers.storage.k8s.io NAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE csi.nutanix.com false true falsefalse Persistent 20h [nutanix@nke-02-55946c-master-0 ~]$ kubectl get csinodes.storage.k8s.io NAME DRIVERS AGE nke-02-55946c-master-0 0 20h nke-02-55946c-worker-0 1 20h
Nutanix CSI Driver のバージョンは v2.6.4 でした。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get deployment nutanix-csi-controller -n ntnx-system -o yaml | grep image: image: quay.io/karbon/csi-provisioner:v3.5.0 image: quay.io/karbon/csi-resizer:v1.8.0 image: quay.io/karbon/csi-snapshotter:v6.2.1 image: quay.io/karbon/ntnx-csi:v2.6.4 image: quay.io/karbon/livenessprobe:v2.10.0
Nutanix CSI Driver は、Helm でインストールされています。
[nutanix@nke-02-55946c-master-0 ~]$ helm list -A WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/nutanix/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/nutanix/.kube/config NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nutanix-csi ntnx-system 1 2024-01-04 22:32:54.853204489 -0800 -0800 deployed nutanix-csi-storage-2.6.4 2.6.4 nutanix-snapshot ntnx-system 1 2024-01-04 22:32:51.559802739 -0800 -0800 deployed nutanix-csi-snapshot-6.2.1 6.2.1
Nutanix CSI Driver を利用する StorageClass も、デフォルトでセットアップされています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE default-storageclass (default) csi.nutanix.com Delete Immediate true 20h
この StorageClass では、Nutanix Volumes を利用するように設定されています。(storageType: NutanixVolumes)
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get storageclass default-storageclass -o yaml allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: ntnxClusterRef: 00060d95-43ae-bb50-3641-00505681a7a8 storageclass.kubernetes.io/is-default-class: "true" creationTimestamp: "2024-01-05T06:32:56Z" name: default-storageclass resourceVersion: "950" uid: e840a725-b118-4627-8df0-a91a414a946d parameters: chapAuth: ENABLED csi.storage.k8s.io/controller-expand-secret-name: ntnx-secret-00060d95-43ae-bb50-3641-00505681a7a8 csi.storage.k8s.io/controller-expand-secret-namespace: kube-system csi.storage.k8s.io/fstype: ext4 csi.storage.k8s.io/node-publish-secret-name: ntnx-secret-00060d95-43ae-bb50-3641-00505681a7a8 csi.storage.k8s.io/node-publish-secret-namespace: kube-system csi.storage.k8s.io/provisioner-secret-name: ntnx-secret-00060d95-43ae-bb50-3641-00505681a7a8 csi.storage.k8s.io/provisioner-secret-namespace: kube-system description: nke-02 flashMode: DISABLED storageContainer: default-container-36059869276876 storageType: NutanixVolumes provisioner: csi.nutanix.com reclaimPolicy: Delete volumeBindingMode: Immediate
この StorageClass を利用した、PersistentVolumeClaim(PVC)が作成されています。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get pvc -A NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ntnx-system prometheus-k8s-db-prometheus-k8s-0 Bound pvc-ddde9e3a-0fb3-43d2-8f69-05180a47af70 30Gi RWO default-storageclass 20h
PersistentVolume です。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get pv -A NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-ddde9e3a-0fb3-43d2-8f69-05180a47af70 30Gi RWO Delete Bound ntnx-system/prometheus-k8s-db-prometheus-k8s-0 default-storageclass 20h
api-resources をみると、特に Nutanix 独自のものは追加されていなそうです。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange namespaces ns v1 false Namespace nodes no v1 false Node persistentvolumeclaims pvc v1 true PersistentVolumeClaim persistentvolumes pv v1 false PersistentVolume pods po v1 true Pod podtemplates v1 true PodTemplate replicationcontrollers rc v1 true ReplicationController resourcequotas quota v1 true ResourceQuota secrets v1 true Secret serviceaccounts sa v1 true ServiceAccount services svc v1 true Service mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition apiservices apiregistration.k8s.io/v1 false APIService controllerrevisions apps/v1 true ControllerRevision daemonsets ds apps/v1 true DaemonSet deployments deploy apps/v1 true Deployment replicasets rs apps/v1 true ReplicaSet statefulsets sts apps/v1 true StatefulSet tokenreviews authentication.k8s.io/v1 false TokenReview localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler cronjobs cj batch/v1 true CronJob jobs batch/v1 true Job certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest leases coordination.k8s.io/v1 true Lease bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration bgppeers crd.projectcalico.org/v1 false BGPPeer blockaffinities crd.projectcalico.org/v1 false BlockAffinity caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus clusterinformations crd.projectcalico.org/v1 false ClusterInformation felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet hostendpoints crd.projectcalico.org/v1 false HostEndpoint ipamblocks crd.projectcalico.org/v1 false IPAMBlock ipamconfigs crd.projectcalico.org/v1 false IPAMConfig ipamhandles crd.projectcalico.org/v1 false IPAMHandle ippools crd.projectcalico.org/v1 false IPPool ipreservations crd.projectcalico.org/v1 false IPReservation kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration networkpolicies crd.projectcalico.org/v1 true NetworkPolicy networksets crd.projectcalico.org/v1 true NetworkSet endpointslices discovery.k8s.io/v1 true EndpointSlice events ev events.k8s.io/v1 true Event flowschemas flowcontrol.apiserver.k8s.io/v1beta3 false FlowSchema prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta3 false PriorityLevelConfiguration nodes metrics.k8s.io/v1beta1 false NodeMetrics pods metrics.k8s.io/v1beta1 true PodMetrics alertmanagerconfigs amcfg monitoring.coreos.com/v1alpha1 true AlertmanagerConfig alertmanagers am monitoring.coreos.com/v1 true Alertmanager podmonitors pmon monitoring.coreos.com/v1 true PodMonitor probes prb monitoring.coreos.com/v1 true Probe prometheuses prom monitoring.coreos.com/v1 true Prometheus prometheusrules promrule monitoring.coreos.com/v1 true PrometheusRule servicemonitors smon monitoring.coreos.com/v1 true ServiceMonitor thanosrulers ruler monitoring.coreos.com/v1 true ThanosRuler ingressclasses networking.k8s.io/v1 false IngressClass ingresses ing networking.k8s.io/v1 true Ingress networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy runtimeclasses node.k8s.io/v1 false RuntimeClass poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding clusterroles rbac.authorization.k8s.io/v1 false ClusterRole rolebindings rbac.authorization.k8s.io/v1 true RoleBinding roles rbac.authorization.k8s.io/v1 true Role priorityclasses pc scheduling.k8s.io/v1 false PriorityClass volumesnapshotclasses vsclass,vsclasses snapshot.storage.k8s.io/v1 false VolumeSnapshotClass volumesnapshotcontents vsc,vscs snapshot.storage.k8s.io/v1 false VolumeSnapshotContent volumesnapshots vs snapshot.storage.k8s.io/v1 true VolumeSnapshot csidrivers storage.k8s.io/v1 false CSIDriver csinodes storage.k8s.io/v1 false CSINode csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity storageclasses sc storage.k8s.io/v1 false StorageClass volumeattachments storage.k8s.io/v1 false VolumeAttachment
CRD も確認しておきます。
[nutanix@nke-02-55946c-master-0 ~]$ kubectl get crd NAME CREATED AT alertmanagerconfigs.monitoring.coreos.com 2024-01-05T06:34:00Z alertmanagers.monitoring.coreos.com 2024-01-05T06:33:59Z bgpconfigurations.crd.projectcalico.org 2024-01-05T06:31:20Z bgppeers.crd.projectcalico.org 2024-01-05T06:31:20Z blockaffinities.crd.projectcalico.org 2024-01-05T06:31:20Z caliconodestatuses.crd.projectcalico.org 2024-01-05T06:31:20Z clusterinformations.crd.projectcalico.org 2024-01-05T06:31:20Z felixconfigurations.crd.projectcalico.org 2024-01-05T06:31:20Z globalnetworkpolicies.crd.projectcalico.org 2024-01-05T06:31:20Z globalnetworksets.crd.projectcalico.org 2024-01-05T06:31:20Z hostendpoints.crd.projectcalico.org 2024-01-05T06:31:20Z ipamblocks.crd.projectcalico.org 2024-01-05T06:31:20Z ipamconfigs.crd.projectcalico.org 2024-01-05T06:31:20Z ipamhandles.crd.projectcalico.org 2024-01-05T06:31:20Z ippools.crd.projectcalico.org 2024-01-05T06:31:20Z ipreservations.crd.projectcalico.org 2024-01-05T06:31:20Z kubecontrollersconfigurations.crd.projectcalico.org 2024-01-05T06:31:20Z networkpolicies.crd.projectcalico.org 2024-01-05T06:31:21Z networksets.crd.projectcalico.org 2024-01-05T06:31:21Z podmonitors.monitoring.coreos.com 2024-01-05T06:34:00Z probes.monitoring.coreos.com 2024-01-05T06:34:00Z prometheuses.monitoring.coreos.com 2024-01-05T06:33:59Z prometheusrules.monitoring.coreos.com 2024-01-05T06:33:59Z servicemonitors.monitoring.coreos.com 2024-01-05T06:34:00Z thanosrulers.monitoring.coreos.com 2024-01-05T06:34:00Z volumesnapshotclasses.snapshot.storage.k8s.io 2024-01-05T06:32:54Z volumesnapshotcontents.snapshot.storage.k8s.io 2024-01-05T06:32:54Z volumesnapshots.snapshot.storage.k8s.io 2024-01-05T06:32:54Z
以上。