Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Docker for Mac で Kubernetes をちょっと試す

More than 1 year has passed since last update.

勉強用に書いときます。

参考にする資料

今こそ始めよう! Kubernetes入門 記事一覧
数時間で完全理解!わりとゴツいKubernetesハンズオン!!
Kubernetes道場 Advent Calendar 2018

初期設定

kubernetesを有効化

DockerアプリのPreferences->Kubernetesから有効にする
スクリーンショット 2019-09-19 17.32.18.png

[x] Enable Kubernetes にチェックを入れてApply

スクリーンショット 2019-09-20 13.41.29.png

ここまででkubectlコマンドが有効になっている

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:49Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:16Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

contextsの設定

私の環境では2つある。

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER          AUTHINFO         NAMESPACE
*         docker-desktop       docker-desktop   docker-desktop
          docker-for-desktop   docker-desktop   docker-desktop

contextsは複数の異なるクラスタ、ユーザーを管理できるよう、接続先や使用するユーザーを切り替えるための仕組みで
2つともCLUSTERとAUTHINFOが指している物が同じな為、このままでも問題ないとは思うのだが、
ひとまず各種記事にある docker-for-desktopに変更する

$ kubectl config use-context docker-for-desktop
Switched to context "docker-for-desktop".

確認

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER          AUTHINFO         NAMESPACE
          docker-desktop       docker-desktop   docker-desktop
*         docker-for-desktop   docker-desktop   docker-desktop

状況確認

まだ立ち上げただけだが、この状態で、下記のようなPod(Podについてとkubectlの簡単な使い方)が動作している。

$ kubectl get pods --namespace=kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-584795fc57-cvgn9                 1/1     Running   0          15m
coredns-584795fc57-j6kr5                 1/1     Running   0          15m
etcd-docker-desktop                      1/1     Running   0          14m
kube-apiserver-docker-desktop            1/1     Running   0          14m
kube-controller-manager-docker-desktop   1/1     Running   0          14m
kube-proxy-kxcxn                         1/1     Running   0          15m
kube-scheduler-docker-desktop            1/1     Running   0          14m

どういったものなのかは下記のリンク先にわかりやすい図で説明してくれてる。
Kubernetesの概要

構築作業

Dashbordの導入

Kubernetes Dashboardというものが用意されているそうなので、まずはこれを導入してみる。

Podの中身を見ながらやりたい為、一度ダウンロードする

$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
$ kubectl apply -f kubernetes-dashboard.yaml.txt 
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
$ kubectl proxy

下記の長いURLでアクセスできる

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Dashbord 認証

Tokenを探す

「default-token-」から始まるsecretを探す。

$ kubectl -n kube-system get secret
NAME  
...                                           TYPE                                  DATA   AGE
default-token-r9tz9                              kubernetes.io/service-account-token   3      3h45m
...

「default-token-r9tz9」の詳細を確認し、Tokenをコピー

$ kubectl -n kube-system describe secret default-token-r9tz9 
Name:         default-token-r9tz9
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 90968fa6-db60-11e9-a391-025000000001

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.ey...

先ほどの画面のToken欄に貼り付けてログイン

スクリーンショット 2019-09-20 17.30.07.png

スクリーンショット 2019-09-20 17.30.16.png

Node.jsの環境を立ててみる。

Node.js環境のDockerを作成。
ソースはnuxt-createとかで作成したものを利用

FROM node:12.10.0-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install
COPY . .

EXPOSE 3000

CMD [ "npm", "start" ]

ビルドを実行

docker build --no-cache -t test-app .

Deploymentを作成

k8s/deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
      - name: test-app
        image: test-app
        imagePullPolicy: IfNotPresent # localのimageを利用する場合に必要
        command:
        ports:
          - containerPort: 3000

Serviceを作成

k8s/service.yaml

kind: Service
apiVersion: v1
metadata:
  name: test-app-service
spec:
  type: LoadBalancer
  selector:
    app: test-app
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

起動~確認〜削除

立ち上げ

$kubectl apply -f k8s/deployment.yaml
$kubectl apply -f k8s/service.yaml

確認、この状態でlocalhost:3000へ接続すれば画面が確認できる。

$ kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
test-app-5df7f6678c-hvzqg   1/1     Running   0          4m18s
test-app-5df7f6678c-rrfc6   1/1     Running   0          4m18s

ダッシュボードを確認すると前回とは違い、グラフや動いているpodが確認できた。

スクリーンショット 2019-10-01 13.14.29.png

削除

$kubectl delete -f k8s/deployment.yaml
$kubectl delete -f k8s/service.yaml

apply delete等は、ファイルが増えてくると大変なので、Makefileとかに書いとくのが良さそう。

kitsuki00
おもにjs関連やってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away