こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
最近私はKubernetesやDockerにとても興味があり、そこで得た知見・ナレッジをこのようにQiitaに投稿しているのですが、それらの技術で遊ぶための環境を社内に用意しています。無料でスペックの必要な環境を組めるので個人的にかなり重宝しているのですが、会社のネットワークとかに障害が発生したらそれらの環境に接続出来ず、遊ぶことが出来ません。それは困った。
そこで「パブリッククラウドでも触れる環境を用意したいよね!」ということで、タイトルにもあるようにGCPに白羽の矢が立ち、触ってみました。
その操作感をメモっておきます。
用語
GCP
Google Cloud Platformの略。AWSとかAzureとかと同じPublic Cloudの一種。
AWSは限られたサービスを1年間無料で使えるが、GCPは$300分は無料で使えるという感じで各サービスを触ることが出来る。
KubernetesサービスとしてGCPはGKEを提供しているがこれも$300分は無料で使える。
AWSはEKSがあるが、これは無料利用の範囲外なのでお金がかかってしまう。
GKE
Google Kubernetes Engineの略。
Kubernetesクラスタをボタンポチポチするだけで準備してくれる神。
GCPログインからGKEでクラスタを構築する
ログイン画面にアクセスします。
googleのいつものログイン画面。自分が持っているアカウントでログインします。
画面左の【三本線】を押下してKubernetes Engine内のクラスタを押下します。
名前をmy-k8s-clusterに変更しました。
後はデフォルトで問題無しです。作成を押下します。
作成が完了するとクラスタ名の左に緑のチェックマークが表示されます。
青文字の接続を押下します。
以下の様なポップアップが表示されます。
CLOUD SHELLで実行を押下します。
画面下にターミナルが表示され、コマンドが自動で入力されているのでEnterで実行します。
以下の様にファイル編集もviコマンド等を使わずに済むため容易となります。
DSをLBで公開し、ブラウザで接続する
GKEのk8sクラスタは2台構成の様です。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
gk3-my-k8s-cluster-default-pool-65cbb045-3ww4 Ready <none> 11m v1.25.7-gke.1000 10.128.0.3 34.135.19.169 Container-Optimized OS from Google 5.15.65+ containerd://1.6.18
gk3-my-k8s-cluster-default-pool-ff5ff3b9-67pp Ready <none> 11m v1.25.7-gke.1000 10.128.0.4 35.238.40.41 Container-Optimized OS from Google 5.15.65+ containerd://1.6.18
DSのyamlは以下となります。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
spec:
selector:
matchLabels:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
LBのyamlは以下となります。
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
spec:
type: LoadBalancer
selector:
name: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
これらをデプロイしていきます。
lbのEXTERNAL-IPがpendingとなっていますが、時間が経過すればアタッチされるので待ちます。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl apply -f nginx-ds.yaml
Warning: Autopilot set default resource requests for DaemonSet default/nginx-ds, as resource requests were not specified. See http://g.co/gke/autopilot-defaults
daemonset.apps/nginx-ds created
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl apply -f nginx-lb.yaml
service/nginx-lb created
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-ds-nl6c5 1/1 Running 0 31s 10.109.128.72 gk3-my-k8s-cluster-default-pool-ff5ff3b9-67pp <none> <none>
pod/nginx-ds-zggph 1/1 Running 0 31s 10.109.128.18 gk3-my-k8s-cluster-default-pool-65cbb045-3ww4 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.110.0.1 <none> 443/TCP 26m <none>
service/nginx-lb LoadBalancer 10.110.1.206 <pending> 60000:32653/TCP 4s name=nginx
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset.apps/nginx-ds 2 2 2 2 2 <none> 32s nginx-container nginx:latest name=nginx
数分待つとEXTERNAL-IPがアタッチされます。
今回は今回は35.188.98.215というIPが付与されています。
ohtsuka_honban@cloudshell:~/yaml (western-antonym-386513)$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.110.0.1 <none> 443/TCP 28m <none>
nginx-lb LoadBalancer 10.110.1.206 35.188.98.215 60000:32653/TCP 80s name=nginx
http://35.188.98.215:60000/をWebブラウザで検索します。
nginxのDeamonSetに接続出来ることが分かりますね。
これでGKE上のDSをLBで公開することに成功しました。