カスタムイメージからwordpress起動-DigitalOceanのkubernetes環境にwordpressを構築する03

2024年1月14日

カスタムイメージからwordpress起動

kubernetes環境とコンテナレジストリは連携済みなので、先程ローカルからpushしたイメージで起動させてみます。

namespaceの作成

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ vi Namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
    name: doks-wp
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl apply -f Namespace.yaml

deployementでイメージを指定して起動

コンテナイメージ確認

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ docker images | grep registry
registry.digitalocean.com/ocarina/doks-wp   0.0.0     ebffc76b62ac   5 hours ago   813MB
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ 

デプロイ

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ 
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl create deployment -n doks-wp doks-wp-dev-web --image=registry.digitalocean.com/ocarina/doks-wp:0.0.0
deployment.apps/doks-wp-web created

確認

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl get pod -n doks-wp
NAME                          READY   STATUS    RESTARTS   AGE
doks-wp-dev-web-c68bffdfd-bnn9m   1/1     Running   0          15m
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl get deployment -n doks-wp
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
doks-wp-dev-web   1/1     1            1           13m

serviceに追加

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl expose deployment -n doks-wp doks-wp-dev-web --type=NodePort --port=80
service/doks-wp-web exposed
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ 

確認

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl get svc -n doks-wp
NAME          TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
doks-wp-dev-web   NodePort   10.245.142.55   <none>        80:30101/TCP   12m
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ 

ブラウザで確認

http://188.166.182.231:30101/

http80もしくはhttps443にしてアクセスするにはingressコントローラーがないとだめで、ingress利用するにはロードバランサーが必要となります。

ingress

workerノードのCPUが枯渇でhelmだとカスタマイズ出来ない?のでymlファイルからapplyします。

ingressコントローラー設定

dkosのスペックが2CPU以上ある場合は下記のリソース下げる設定は不要です

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml -O ingress-nginx-controller.yaml

cp -ip ingress-nginx-controller.yaml{,.org}
vi ingress-nginx-controller.yaml

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ diff ingress-nginx-controller.yaml{,.org}
485,486c485,486
<             cpu: 50m
<             memory: 70Mi
---
>             cpu: 100m
>             memory: 90Mi

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl apply -f ingress-nginx-controller.yaml
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ kubectl describe node | grep ingress
  ingress-nginx               ingress-nginx-controller-566d64c79-8zpwz                         50m (5%)      0 (0%)      70Mi (4%)        0 (0%)         15m
ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ 

Ingressコントローラーを起動させるとLBがworkerノード毎に作られてしまいますのでご注意ください。

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ doctl compute load-balancer list --format IP,ID,Name,Status
IP                ID                                      Name                                Status
139.59.220.157    ad099c41-f541-4dcc-ae3e-a73cb4e5726f    ae774e87aba9a40e284c7fa569de1732    active

Ingress設定

まだSSL証明書を取得する前のマニフェストです

Ingress-doks-wp-web.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: doks-wp-web-ingress
  namespace: doks-wp
  labels:
    app: doks-wp
#  annotations:
##    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
    - host: 
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: doks-wp-web
                port:
                  number: 80

http://139.59.220.157/

  • LB経由でつながるようになった。
  • 別途LBで12ドル取られます。。。

次回は外部にあるDBへのセキュアな接続と、
configmapでwp-config.phpで環境変数が利用できるようにします。

下記は、リソース不足でだめだった手順

ocarina@ab350-pro4:~/work/doks-wp/k8s-yml$ helm upgrade --install ingress-nginx ingress-nginx   --repo https://kubernetes.github.io/ingress-nginx   --namespace ingress-nginx --create-namespace
Release "ingress-nginx" does not exist. Installing it now.
Release "ingress-nginx" does not exist. Installing it now.
NAME: ingress-nginx
LAST DEPLOYED: Sat Dec 30 16:28:41 2023
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the load balancer IP to be available.
You can watch the status by running 'kubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch'

An example Ingress that makes use of the controller:
  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: example
    namespace: foo
  spec:
    ingressClassName: nginx
    rules:
      - host: www.example.com
        http:
          paths:
            - pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port:
                    number: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls

Posted by ocarina