Docker Desktop 付属の Kubernetes を試してみたので、その備忘録と所感まとめ。
目次
- これまでのkubernetes遍歴
- 前提
- Kubernetesを有効化
- try kubernetes-dashboard
- ログイン用のサンプルユーザの作成
- sampleサーバ(nginx)のデプロイトライ
- 追記 - たまに落ちる?
- 今後の展望
- 関連リンク
これまでのkubernetes遍歴
長くなったので、以下の記事に別立てでまとめてみました。
前提
- Docker Desktopがインストール済み
- Windows環境
- LinuxやMac環境の動作は未確認
Kubernetesを有効化
Kubernetesを有効にする方法はとても簡単でした。
Docker Desktop の設定ページでKubernetes項目を選択。
Enable Kubernetesのチェックボックスにチェックを入れて、Apply & Restart
ボタンを押せば有効化がスタートします。
自分の場合は、最初、エラーが出て動かなかったのですが、Docker Desktopをリスタートしてみたところ無事動作しました。
try kubernetes-dashboard
まずは、Kubernetesの状態確認用にkubernetes-dashboardをインストールしてみます。
以下のリポジトリページのGetting Startedをトレースしてみます。
以下のコマンドでインストール。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
起動したダッシュボードにアクセスするには、以下のコマンドを実行して、
kubectl proxy
以下のURLにアクセスするとkubernetes-dashboardのログイン画面が表示されます。
※ ここではkubectl proxy
を使っていますが、常時アクセス可能にしたい場合は、後述のアクセス用serviceを作成する方法を参照してください。
ログイン用のサンプルユーザの作成
ダッシュボードは起動したものの、ログイン用のユーザ(トークン)が必要なため、以下のページの解説を参考にログイン用のサンプルユーザの作成します。
dashboard-adminuser.yaml
を作成して、以下の内容を追加します。
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
以下のコマンドを実行してサンプルユーザを作成します。
kubectl apply -f dashboard-adminuser.yaml
以下のコマンドでログイン用のトークンを取得します。
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
トークンが表示されたら、コピーして、先ほど表示したダッシュボードページのトークン入力欄にペースト。
「トークン」のラジオボタンを選択して、「サインイン」ボタンをクリックすれば、Kubernetesの現在の状態や情報が表示されます。
第一印象
第一印象は「軽っ!」
まだ、半日程度しか使ってませんが、安定性もいいような気がします。
以前、minikubeとかRancherでVPS運用してた時は、激重かつ不安定で辛かったので、軽く感動するレベルの軽快感でした。
マシンスペックとかバージョン違い(3年くらい前)があるので、単純に比較はできないですが、とにかく軽さに感動。
sampleサーバ(nginx)のデプロイトライ
helmを使って、オリジナルチャートをデプロイしてみます。
helmのインストールは以下のページを参照してください。
新しいチャートの作成
まずは新しいチャートを作ります。
以下のコマンドを実行してください。
helm create sample
インストール
とりあえずインストール
helm install sample ./sample
動作確認
kubectl get pods
を実行して、sampleポッドが作成されていればインストール成功です。
また、先ほどセットアップしたkubernetes-dashboardを開いて、sampleポッドやsampleサービスがあればOKです。
ホストからアクセス
ホストからのアクセスを楽にするために、serviceの設定を調整します。
sample/templates/service.yaml
のspec.ports
にnodePort: 8080
を追加。
ここで、ポートは何番でもOKです。
また、sample/values.yaml
のservice.type
をNodePort
に変更してください。
以上の2つの変更をした後、以下のコマンドで先ほどのhelmリリースを更新します。
helm upgrade sample ./sample
http://localhost:8080を開いて、nginxのWelcomeページが表示されれば、設定完了です。
追記 - たまに落ちる?
放置するとなのか、高負荷でか、たまに全ポッドが落ちる(泣)
※ システムコンテナについては未確認。
検索したところ、「DiskPressure」で同様の症状が起こる模様。
以下のページを参考に、
kubectl get pod [pod_name] --outpul=yaml
で落ちたポッドを調べたところ、以下のようなstatus情報が表示されました。
status: message: 'Pod The node had condition: [DiskPressure]. ' phase: Failed reason: Evicted
DiskPressureっぽい…
ちょっと、ドツボにはまりつつあるので、今日はこの辺にしておこうと思います(汗)
今後の展望
DiskPressureでポッドが落ちてるっぽいので、とりあえず空いた時間でimageとかvolumeの整理をしようかと思います。
その後、安定的に動作するようなら、現状、Dockerを使ってローカルで使ってるツールを移行もしくは併用しながら、導入を検討したいと思います。
とりあえず、JenkinsがCIランナーとしてしか使ってなかったり、ELK Stackがポッド管理の方が楽そうな気がするので、その辺りから始めてみたいと思います。
良さげなら、動作確認用に動かしてるDockerコンテナなんかも移行したい。。。このままだと、ドツボコースなので、今日はいったんここでストップ。
[追記]
imageやvolumeの整理をしてディスク容量をあけた後にKubernetesを再インストール(リセット)した所、安定して動作するようになりました。
ディスク容量に気を付けておけば、問題なく動作しそうです。
関連リンク
試したコードは以下のページを参照してください。