LoginSignup
1
0

More than 1 year has passed since last update.

GKEにログインし、NGINXのDeamonSetをLoadBalancerで公開してみる(個人的備忘録)

Posted at

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

最近私は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でクラスタを構築する

ログイン画面にアクセスします。

画面右のログインを押下します。
gcp01

googleのいつものログイン画面。自分が持っているアカウントでログインします。
gcp02

画面右のコンソールを押下します。
gcp03

画面左の【三本線】を押下してKubernetes Engine内のクラスタを押下します。
gcp04

青文字の作成を押下します。
gcp05

名前をmy-k8s-clusterに変更しました。
後はデフォルトで問題無しです。作成を押下します。
gcp06

クラスタ作成中となりますので、5分ほど待ちます。
gcp07
gcp08

作成が完了するとクラスタ名の左に緑のチェックマークが表示されます。
青文字の接続を押下します。
gcp09

以下の様なポップアップが表示されます。
CLOUD SHELLで実行を押下します。
gcp10

画面下にターミナルが表示され、コマンドが自動で入力されているのでEnterで実行します。
gcp11

承認でOKです。
gcp12
gcp13

右から二番目の新しいウィンドウで開くを押下します。
gcp14

エディタを開くを押下します。
gcp15

すると以下の様にVSCodeライクな開発環境が整います。
gcp16

以下の様にファイル編集もviコマンド等を使わずに済むため容易となります。
gcp17

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は以下となります。

nginx-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は以下となります。

nginx-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で公開することに成功しました。

gcp18

遊び終わったらクラスタを削除しましょう。
gcp19

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0