How To Automate Deployments to DigitalOcean Kubernetes with CircleCI

git pushでkubernetesのpodのイメージ更新まで自動化出来たので手順を残します。

  • 実現したいこと
    • git push したタイミングでcircleciでテスト、問題なければkubernetes上で稼働しているpodのイメージを更新させる

environment

  • kubernetes
    • v1.28.2
  • namespace
    • doks-wp
  • container registry
    • E...

add AWS ECR private registry

コンテナレジストリをDigital Ocean RegistryからAWS ECRへ変更しました。

背景

circle CIからの自動デプロイのテストで、digital oceanの500MB上限に達してしまってcircle ciからのPUSHが失敗してしまうので、ECRに移行することにしました。

手順

  • https://kubernetes.io/ja/docs/concepts/configuration/secret/

の通りにやっても401エラーになってしまったので

  • https://linu...

note of digital ocean

kubernetesの勉強をしていましたがminikubeでは物足りなくなったので、 digitaloceanが安いということで、kubernetesを契約しました。

DigitalOcean Referral Badge

こちらからアカウントを作成すると有効期限が2ヶ月分の$200クレジットが付与されます。

AWSのEKSは$72+利用料で手が出ません。

本当はOCI(Oracle Cloud Infrastructure)で無料枠インスタンスから作ろうとしましたが大阪リージョンがリソース上限で、アカウントの移動も出来ず...

SSL/TLS証明書取得

cert-managerのインストール

  • manifestからの場合
    • https://cert-manager.io/docs/installation/kubectl/
      kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.2/cert-manager.yaml
  • helmの場合
    • https://cert-manager.io/docs/tutorials/acme/nginx-ingress/
helm r...

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

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

namespaceの作成

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

deployemen

...

ローカル環境でwordpressをセットアップする-DigitalOceanのkubernetes環境にwordpressを構築する02

DOKSの手順のwordpressではなくwordpressのdockerイメージから作ります。

ローカルで作業します

download & run

docker pull wordpress:latest
docker run -p 80:80 -d -i docker.io/library/wordpress:latest

http://localhost/ に繋いでwordpressをセットアップします。

DBはGCEを指定して...

NFSとredisセットアップ-DigitalOceanのkubernetes環境にwordpressを構築する01

OpenEBS Dynamic NFS Provisioner のインストールと設定

install helm

k8sのパッケージ管理ツールです。

kubernetesに接続した作業端末で行います。

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

cont

...

オンプレミスな環境にkubernetesを構築

environment

  • ubuntu22.04
  • kubernetes
    • version 1.28.2
    • control node * 1
    • worker node * 2

VMなので1台作り、kubernetes環境が初期状態で複製しました。

install kubernetes

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

sudo apt-get install...

永続ストレージの利用

最初は/var/www/htmlはイメージ化して利用する予定 でしたが、CMSには向いていないと思い永続ボリュームを利用することにしました。

  • redisで利用しているものと同じNFSコントローラーを利用します。
  • 料金は10GBの場合は$1のようです。
  • redisのmanifestを転用して作成します。
  • pvの方は不要でした。pvcのmanifestだけでpvの方も作成されます。

redisのpvcのmanifestをダウンロード

cd ~/work/doks-wp/dev/k8s
kubectl get pvc -A|grep redi...

DBセキュア接続設定とConfigmapでの環境変数の利用

DB接続証明書設定

GCEで作業

root@instance-1:~/work/mariadb-cert/cert# cat client-key.pem client-cert.pem ../ca.pem > gce-mariadb-pair.pem

mysqlへのSSL接続を強制にする

root@instance-1:~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is...