Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Step1: kubectl apply でデプロイする

まずは Argo CD を使わずに普通にサービスをデプロイしてみます。

Git リポジトリを作る

GitHub に新しく Git リポジトリを作成してください。名前は何でもいいですが、ここでは hello-server という名前にしたという前提で進めていきます。 後々 Argo CD から read する必要があるので、リポジトリのスコープは public にしておいてください。

ソースコードをコピー

hello-server に最初のコードを投入しましょう。

以下のディレクトリに簡単な HTTP サーバーのソースコードと Kubernetes マニフェストが入っています。

https://github.com/cybozu/argocd-handson/tree/main/src/step1/

これを今作ったリポジトリにコピーします。 カレントディレクトリが hello-server のトップにある状態で以下の手順を実行してください。

# 一時ディレクトリ作成してそこに移動
pushd $(mktemp -d)
# ソースコードを取得
git clone https://github.com/cybozu/argocd-handson .
# step1 の内容を元のディレクトリにコピー
cp -a src/step1/. $(dirs -l +1)
# 元のディレクトリに戻る
popd

コピーしたファイルやディレクトリをすべてコミットして git push しておいてください。

イメージをビルド

make push するとイメージをビルドしてローカルの kind クラスタにイメージをロードできます。やってみてください。

※ mac を使っている人は go build に環境変数として GOOS=linux GOARCH=amd64 を渡す必要があります。

※ kind 以外のクラスタ構築ツールを使っている人は Makefile の push の手順を書き換える必要があります。例えば、minikube を使っている人は kind load docker-image の代わりに minikube image load を使うように書き換えてください。

実際の運用では make push でコンテナレジストリへの push を行う想定ですが、今回のハンズオンではコンテナレジストリを用意する手間を省くために、コンテナレジストリへの push は行っていません。 その代わりに kind の機能を使ってノードに直接イメージをロードしています。

イメージの動作確認

念のため、今ビルドしたイメージが動くのか確かめてみましょう。 まずはサーバーを起動します。

docker run --rm -p 3000:8080 docker.example.com/hello-server:latest

そして別のシェルから以下を実行してください。

curl -i localhost:3000

正常にレスポンスが返ってくれば成功です。

※ ローカル側のポートを 3000 にしているのは、Argo CD 用のポートフォワードと被らないようにするためです。

Kubernetes にデプロイ

Kubernetes クラスタにデプロイしてみましょう。 まずは Argo CD を使わず、普段通り kubectl apply でデプロイします。

kubectl create namespace hello-server
kubectl apply -n hello-server -f kubernetes/deployment.yaml
kubectl apply -n hello-server -f kubernetes/service.yaml

# 確認
kubectl get all -n hello-server

# アクセスしてみる
kubectl exec -it bastion -- curl -i http://hello-server.hello-server.svc.cluster.local

アクセスが正常に行われれば成功です。

後片付け

以上で Argo CD の使い方を学ぶ準備ができました。 次のステップで Argo CD を使ってデプロイしなおすので、一旦 Kubernetes 環境は綺麗にしておきます。

kubectl delete namespace hello-server