Windows10にk8sの導入とチェックとdockerと

やばい
このままじゃコンテナ開発マンになってしまう

PHP8を試したよとかpython弄ったよとかって記事を書こうと思ったのにコンテナの方ばっかりいじってる気がする


背景

k8sのingressを試したかった が一番の目的
コンテナで管理していく時、nginxでrewriteとかlocationとか分けてphpやらpythonやらに飛ばしてる部分をもうserviceでrewriteしてfast-cgi://に直接飛ばしたほうがいいんじゃないかって思った

その前段階でdocker buildで作った自前コンテナをk8sでデプロイするまでをやったよ
という備忘録

まずはwin環境にk8sを入れる(DockerDesktopから)

Docker環境導入は前記事(Docker環境を作る)から
DockerDesktopからkubernetes入れられるのは便利ね
しかも設定からEnable Kubernetesにチェック入れるだけ
インストールできたら左下によく見るk8sのマークが入る

導入されたらそれだけでkubectlコマンドが使える(だったはず(曖昧))
はるか昔にminikube入れてたから使えてたかもしれない

cmd> kubectl get node
NAME             STATUS   ROLES    AGE     VERSION
docker-desktop   Ready    master   2d11h   v1.19.7

docker-desktopというnodeが作られる
nodeにsshできるかなと思ったけど、見知らぬipが振られていたので、わからなかった
これはまた今度かな

cmd> kubectl describe node docker-desktop | grep -A 2 Address
Addresses:
  InternalIP:  192.168.yy.4
  Hostname:    docker-desktop

docker image作成

まず2種類のdocker imageを作る
前回(Docker環境を作る)のDocker環境テスト時と同様、特にいじる部分はなし
(多少のフォルダ構成は変えた)

FROM nginx:alpine
COPY nginx/nginx.conf /etc/nginx/
COPY html/index.html /usr/share/nginx/html/
<!doctype html>
<html>
<body>
<h1>Hello Nginx on Docker!</h1>
work on dokcer
</body>
</html>

これでdocker imageを作る

cmd> docker build . -t tiny-nginx:0.1
→tiny-nginx:0.1を作成する
cmd> docker image ls
REPOSITORY                           TAG                                                     IMAGE ID       CREATED         SIZE
tiny-nginx                           0.1                                                     ec5ecaba6758   9 seconds ago   22.6MB

k8sでデプロイする

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx-label
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx-label
    spec:
      containers:
      - name: tnginx
        image: tiny-nginx:0.1
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: nginx-label
  ports:
  - name: http
    port: 8080
    targetPort: 80
    protocol: TCP
cmd> kubectl create ns dev
namespace/dev created
念の為namespace/devを作っておく
> kubectl get svc -n dev
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
nginx-service   ClusterIP   10.99.233.150   <none>        8080/TCP   2d11h

cmd> kubectl get pod -n dev
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6465d9766d-6h6wn   1/1     Running   0          31s
nginx-deployment-6465d9766d-784ww   1/1     Running   0          33s

cmd> kubectl exec -n dev nginx-deployment-6465d9766d-6h6wn -- bash
OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "bash": executable file not found in $PATH: unknown
command terminated with exit code 126
→bashは入っていないようだ
cmd> kubectl exec -it -n dev nginx-deployment-6465d9766d-6h6wn -- sh
/ # nginx -v
nginx version: nginx/1.19.10
/ # cat /usr/share/nginx/html/index.html
<!doctype html>
<html>
<body>
<h1>Hello Nginx on Docker!</h1>
work on dokcer
</body>
</html>

ちゃんとlocalで作成したdocker imageがデプロイできている

localでポート開放するためにはkubectl port-forwardで実施できる
kubectl port-forward -n dev nginx-service 80:8080
だとnginx-serviceのpodを探してしまう

cmd> kubectl port-forward -n dev service/nginx-service 80:8080
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80
■
→inputが戻らず待受状態になる

localhostへ接続

ちゃんとつながった
cmdにはアクセスが有った時Handling connection for 80が表示される
戻るにはCtrl+C

まとめ

Docker Desktop for Windowsでビルドしたimageは、k8s(Docker Desktop for Windows)で直接使える
なんてことはない簡単だった

 35 total views