NUC로 시작하는 VMware Tanzu - vSphere with Tanzu로 APP 배포

10376 단어 vmwareNUCkubernetes
오늘은 vSphere with Tanzu에서 APP 배포를 시도해 보겠습니다.

APP 배포



곧, Deploy a workload에 따라 APP에 대한 작업을 배우십시오!

포드 조작



우선은, 「pod 작성 & 로그인→pod내에서 조작→pod 삭제」를 해 보고 싶습니다.

발판
# ログインは一定時間で有効期限が切れます。必要に応じて、ログインし直しましょう。
$ SC_IP=172.18.0.208
$ NS=tkgs-dev
$ kubectl vsphere login --server=$SC_IP --tanzu-kubernetes-cluster-name tkc-1 --tanzu-kubernetes-cluster-namespace $NAMESPACE --insecure-skip-tls-verify

# busybox podを作成して、pod内のshellにログインするコマンド
$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
# (/ # というプロンプトに変わり、ログイン出来たことが確認できる)
/ #

# googleさんに話しかけてみる
/ # ping google.com
PING google.com (172.217.25.206): 56 data bytes
64 bytes from 172.217.25.206: seq=0 ttl=114 time=3.975 ms
^C

# googleさんへの経路を確認
/ # traceroute -n google.com
traceroute to google.com (172.217.161.46), 30 hops max, 46 byte packets
 1  192.168.1.1  0.492 ms  0.002 ms  0.001 ms
 2  172.18.0.1  1.562 ms  1.005 ms  1.243 ms
 3  192.168.5.1  1.863 ms  0.757 ms  0.878 ms
 4  *  *  *
# (以下省略)

# exitすると、プロンプトが戻ってきてPodが「完了」状態となる。
/ # exit
$ kubectl get pods
NAME      READY   STATUS      RESTARTS   AGE
busybox   0/1     Completed   0          62s

# Podの削除
$ kubectl delete pod busybox
pod "busybox" deleted
$ kubectl get pods
No resources found in default namespace.

Persistent Volume 만들기



다음 시나리오입니다. vSphere with Tanzu에서는 Storage Class를 이용한 Persistent Volume(K8s상의 영구 디스크)의 이용이 특징 중 하나이므로 시도해보고 싶습니다.

발판
# デモファイルのダウンロード
$ wget https://raw.githubusercontent.com/vsphere-tmm/vsphere-with-tanzu-quick-start/master/manifests/pvc.yaml

# PVC(永続ディスクの要求)マニフェスト。3GiのサイズでRWOのディスクを要求する内容。
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: vsphere-with-tanzu-pv
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

# TKCデプロイ時に指定したDefault StorageClassの情報。
$ kubectl get storageclass
NAME                               PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
k8s-dev-storage-policy (default)   csi.vsphere.vmware.com   Delete          Immediate           true                   13h

# 現時点では、PVやPVCが存在しないことを確認
$ kubectl get pv,pvc
No resources found in default namespace.

# 先ほどのPVCマニフェストを適用
$ kubectl apply -f pvc.yaml
persistentvolumeclaim/vsphere-with-tanzu-pv created

# しばらく待ち、PVCによってPVが作成されたことを確認。
# また、StorageClassに、k8s-dev-storage-policy が用いられていることも確認できる。
$ kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS             REASON   AGE
persistentvolume/pvc-ef525f2a-75b1-49b6-9d8e-d95edf6e5b10   3Gi        RWO            Delete           Bound    default/vsphere-with-tanzu-pv   k8s-dev-storage-policy            32s

NAME                                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS             AGE
persistentvolumeclaim/vsphere-with-tanzu-pv   Bound    pvc-ef525f2a-75b1-49b6-9d8e-d95edf6e5b10   3Gi        RWO            k8s-dev-storage-policy   53s

이제 vCenter를 살펴보겠습니다. 요청한 PVC는 "tkgs-dev"네임 스페이스의 "저장소"탭에서 "퍼시스턴트 볼륨 요청"으로 확인할 수 있습니다.

PVC 이름을 클릭하면 vSphere 클러스터의 클라우드 네이티브 스토리지의 컨테이너 볼륨 항목으로 전환하여 PV 정보를 확인할 수 있습니다.

vCenter에서 K8s 리소스 정보를 볼 수 있는 것은 vSphere with Tanzu의 한 가지 장점입니다.

PV로 포드 배포



그런 다음 방금 만든 "vsphere-with-tanzu-pv"를 사용하는 Pod를 배포합니다.

발판
# サンプルPodのダウンロード
$ wget https://raw.githubusercontent.com/vsphere-tmm/vsphere-with-tanzu-quick-start/master/manifests/pod.yaml

# Pod内容の確認。先ほどの「vsphere-with-tanzu-pv」というPVCをボリュームとして定義し、「/usr/share/nginx/html」にマウントしていることが分かる。
$ cat pod.yaml

# 現在のPodの確認。default namespaceにはなにもない。
$ kubectl get pod
No resources found in default namespace.

# Podのデプロイ。Podリソースが追加されたことが確認できる。
$ kubectl apply -f pod.yaml
pod/vsphere-with-tanzu-pod created
$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
vsphere-with-tanzu-pod   1/1     Running   0          4m12s

바로, 이 Pod에 브라우저로부터 액세스 해 봅시다.
여기에서 하나 포인트로서 현재 발판을 경유하여 K8s에 액세스하기 위해 K8s에서 발판으로 포트 포워드하고, 더 발판에 대해서도 SSH 포트 포워드 해 주면 K8s 리소스를 로컬 PC에서 표시 가능 됩니다. 이런 이미지.

로컬 PC <-- (8080 포트로 전송) - 발판 <-- (8080 포트로 변환하여 전송) - Port 80이있는 Pod

이를 다단 포트 포워드라고합니다. 비교적 발판이 있는 환경에서는, Pod가 가지는 관리 화면에의 액세스에 이 기술을 다용하기 때문에, 기억해 두면 좋을 것입니다.

로컬 PC
# 踏み台の8080portは、localhostの8080portに転送しつつ、sshログイン
% ssh [email protected] -L 8080:localhost:8080
# (出力メッセージは省略)

# ここから踏み台環境での操作。指定のPodの port 80 を、接続元の 8080 port に転送するコマンド
$ kubectl port-forward vsphere-with-tanzu-pod 8080:80
Forwarding from 127.0.0.1:8080 -> 80

이 방법으로 액세스할 수 있습니다. 그러나 콘텐츠가 없으므로 다음 화면이 표시됩니다.

포드에 들어가서 PV에 콘텐츠를 설치해 봅시다.

발판
# Podの中に入るコマンド
$ kubectl exec -it vsphere-with-tanzu-pod -- bash

# Pod内の操作。PVが設置してある /usr/share/nginx/html に、コンテンツの設置
$ cd /usr/share/nginx/html
$ curl https://raw.githubusercontent.com/vsphere-tmm/vsphere-with-tanzu-quick-start/master/site/index.html -o index.html
$ exit

다시 다단 포트 포워드 해, 브라우저에 액세스하면・・・, 이번은 표시할 수 있었습니다!


LoadBalancer 사용



매번 다단 포트 포워드하는 것은 번거롭지요? HAProxy를 사용하여 K8s 컨테이너 네트워크 외부에서 액세스할 수 있습니다.

발판
# まずはサンプルコンテンツのダウンロード
$ wget https://raw.githubusercontent.com/vsphere-tmm/vsphere-with-tanzu-quick-start/master/manifests/svc.yaml

# Serviceリソースは、podを公開するためのリソース。Type: LoadBalancerによって、外部LBを利用する。
$ cat svc.yaml

# kubernetesとsupervisorの2つのサービスは、TKC作成時に最初から作成されています。
$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    18h
supervisor   ClusterIP   None         <none>        6443/TCP   18h

# Serviceリソースのデプロイ。「nginx-service」が追加されているのが分かる。
$ kubectl apply -f svc.yaml
service/nginx-service created
$ kubectl get svc
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
kubernetes      ClusterIP      10.96.0.1       <none>         443/TCP        18h
nginx-service   LoadBalancer   10.109.180.30   172.18.0.211   80:30861/TCP   5s
supervisor      ClusterIP      None            <none>         6443/TCP       18h

위의 "EXTERNAL-IP"로 할당된 "172.18.0.211"에 액세스해 봅시다.


할 수 있어요! 실은 이것, 상당히 굉장한 일입니다.
일반적인 K8s 환경의 경우 HAProxy를 이 K8s 환경에서 사용할 수 있도록 매뉴얼을 도입해야 하지만 Supervisor Cluster는 TKC에 로드 밸런서가 자동으로 할당되어 있음을 알 수 있습니다.

vSphere with Tanzu의 이야기는 이상입니다!
내일부터는 조금 다른 이야기를 해 나가고 싶습니다.

좋은 웹페이지 즐겨찾기