カスタムイメージからwordpress起動-DigitalOceanのkubernetes環境にwordpressを構築する03
カスタムイメージから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$
ブラウザで確認
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
- 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