Docker Desktopで Kubernetes 簡単トライアル

Docker Desktop 付属の Kubernetes を試してみたので、その備忘録と所感まとめ。

目次

これまでの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のログイン画面が表示されます。

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

※ ここでは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.yamlspec.portsnodePort: 8080を追加。

ここで、ポートは何番でもOKです。

また、sample/values.yamlservice.typeNodePortに変更してください。

以上の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を再インストール(リセット)した所、安定して動作するようになりました。

ディスク容量に気を付けておけば、問題なく動作しそうです。

関連リンク

試したコードは以下のページを参照してください。