Software Engineer Blog

エンジニアブログです。技術情報(Go/TypeScript/k8s)や趣味の話も書くかもです。

【WEB+DB PRESS Vol.99】k8sの記事での利用コマンド

概要

WEB+DB PRESS Vol.99 の記事を参考にk8sを利用してみました。
詳しい内容は、記事をご参照いただければと思います。(非常にわかりやすい記事でした)
下記は、記事に書いてあるコマンドのままですが、メモ書き程度に思っていただければ。

Amazon CAPTCHA

コマンド

gcloud側の設定

# project の設定
% gcloud config set project xxxx

# ゾーンの設定
% gcloud config set compute/zone asia-northeast1-a

# 認証設定
% gcloud auth login

コンテナクラスタ起動

# クラスタ起動
% gcloud container clusters create one \
--cluster-version=1.6.7 \
--machine-type=g1-small
Creating cluster one...done.
Created [https://container.googleapis.com/v1/projects/xxxxx/zones/asia-northeast1-a/clusters/one].
kubeconfig entry generated for one.
NAME  ZONE               MASTER_VERSION  MASTER_IP       MACHINE_TYPE  NODE_VERSION  NUM_NODES  STATUS
one   asia-northeast1-a  1.6.7           35.190.233.232  g1-small      1.6.7         3          RUNNING

GCRにイメージをbuildしてpush

# Container build file
% cat manifest/cloudbuild.yaml
  env: ['PROJECT_ROOT=one']
  args: ['build', '-o', 'goneup']
- name: 'gcr.io/cloud-builders/docker'
  env: ['PROJECT_ROOT=one']
  args: ['build', '--tag=asia.gcr.io/$PROJECT_ID/one/goneup', '.']
images: ['asia.gcr.io/$PROJECT_ID/one/goneup']%

# push gcr
% gcloud container builds submit --config=manifest/cloudbuild.yaml .

kubernetes利用

Pod単独

% cat manifest/pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: goneup
spec:
  containers:
    - image: asia.gcr.io/[project]/one/goneup:latest
      imagePullPolicy: Always
      name: goneup

# create pod
% kubectl create -f manifest/pod.yaml

# port forward
% kubectl port-forward [pod name] [local port]:[external port]

ReplicaSet

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: goneup
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: goneup
    spec:
      containers:
        - image: asia.gcr.io/[project]/one/goneup:latest
          imagePullPolicy: Always
          name: goneup

# create replicaset
% kubectl create -f manifest/replicaset.yaml

# check replicasets
% kubectl get replicasets
NAME                DESIRED   CURRENT   READY     AGE
goneup-1100937273   2         2         2         57s

# replace replicaset
% kubectl replace -f manifest/replicaset.yaml

Deployment

% cat manifest/deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: goneup
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: goneup
    spec:
      containers:
        - image: asia.gcr.io/[project]/one/goneup:latest
          imagePullPolicy: Always
          name: goneup

# create deployment
% kubectl create -f manifest/deployment.yaml

# check deployment
% kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
goneup    2         2         2            2           50s

Service

% cat manifest/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: goneup
spec:
  type: LoadBalancer
  selector:
      name: goneup
  ports:
      - port: 8080

# create service
% kubectl create -f manifest/service.yaml

Ingress

% cat manifest/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: goneup
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: goneup
              servicePort: 8080

# create ingress
% kubectl create -f manifest/ingress.yaml

まとめ

マニフェストファイルを作成することで、簡単にGCP上にk8sを構築できました。
また情報にアクセスしたい際は、kubectl get xxxで簡単にアクセスできるところが非常にいいなと感じました。
基本的な設定しか入れていないので、利用してみてもっと詳細な設定まで使いこなせると良いかと思います。