やばい
このままじゃコンテナ開発マンになってしまう
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)で直接使える
なんてことはない簡単だった