NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Kubernetes Engine クラスタの様子。(SSH)

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             false                      false               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

以上。

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。