あれからマニフェストファイルのリソース設定をいじってみたり、minikube start
コマンドのオプションを色々試してみたのですがうまくいかなかったので、番外編としてDigitalOceanのManaged Kubernetesのセットアップをしてみたいと思います。
僕も使ったことがないのでドキドキです。
始めていきましょう。
(注:無料枠ではないので実行すると課金が発生します。)
Get Started
トップページ(https://www.digitalocean.com/products/kubernetes/)からGet Startedしていきます。
Create Cluster
Create Clusterページでロケーションやノードの設定などを行います。
最後に画面最下のCreate Clusterの緑のボタンを押すとクラスタの作成が開始されます。
Configure Cluster
始めにマネジメントツールのインストールのステップがあります。kubectl
の他にDigitalOceanのツールであるdoctl
も使えるようですが今回はkubectl
でいきます。
次にコンフィグファイルのダウンロードがあります。
おすすめされているのはdoctl
コマンドを使った自動更新ですが、今回はお試しなのでただダウンロードしてくるだけ(証明書は手動更新)のほうを選びます。
ダウンロードが完了したら以下のコマンドでクラスタにアクセスできるかどうか確認してみます。
$ kubectl --kubeconfig="<file name>" get nodes
NAME STATUS ROLES AGE VERSION
pool-y2hks24e6-l3t2 Ready <none> 2m58s v1.16.2
pool-y2hks24e6-l3tl Ready <none> 2m39s v1.16.2
pool-y2hks24e6-l3tt Ready <none> 2m59s v1.16.2
デプロイ
ではデプロイしてみましょう。
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" apply -f kubernetes/namespace.yaml
namespace/qiita created
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" get namespaces
NAME STATUS AGE
default Active 28m
kube-node-lease Active 28m
kube-public Active 28m
kube-system Active 28m
qiita Active 15s
いい感じです。他のリソースもこの調子でkubectl apply
していきます。
すべてのリソースをアプライした後がこんな感じ。
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" -n qiita get pods
NAME READY STATUS RESTARTS AGE
cockroach-init-fwjld 0/1 Completed 0 14h
cockroachdb-0 1/1 Running 1 14h
cockroachdb-1 1/1 Running 80 14h
cockroachdb-2 1/1 Running 0 14h
kafka-0 2/2 Running 0 14h
kafka-1 2/2 Running 0 14h
kafka-2 1/2 Running 0 112s
kafka-etcd-0 1/1 Running 29 14h
kafka-etcd-1 1/1 Running 0 14h
kafka-etcd-2 1/1 Running 1 14h
qiita-advent-calendar-2019-7d7d7b44b6-rgf9g 1/1 Running 0 14h
qiita-advent-calendar-2019-r6pkv 0/1 Completed 0 14h
zetcd-cc957f748-7nlxg 1/1 Running 0 14h
zetcd-cc957f748-lksmf 1/1 Running 0 14h
うーん......?Ready
にならないですね。。
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" -n qiita logs kafka-0 broker
...
[2019-12-05 09:16:00,372] WARN [RequestSendThread controllerId=0] Controller 0's connection to broker kafka-1.broker.qiita.svc.cluster.local:9092 (id: 1 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
java.io.IOException: Connection to kafka-1.broker.qiita.svc.cluster.local:9092 (id: 1 rack: null) failed.
at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:70)
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:279)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:233)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
[2019-12-05 09:16:00,433] WARN [Controller id=0, targetBrokerId=2] Error connecting to node kafka-2.broker.qiita.svc.cluster.local:9092 (id: 2 rack: null) (org.apache.kafka.clients.NetworkClient)
java.io.IOException: Can't resolve address: kafka-2.broker.qiita.svc.cluster.local:9092
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:235)
at org.apache.kafka.common.network.Selector.connect(Selector.java:214)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:864)
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:265)
at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:64)
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:279)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:233)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
Caused by: java.nio.channels.UnresolvedAddressException
at java.base/sun.nio.ch.Net.checkAddress(Net.java:112)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:233)
... 7 more
...
これは......?
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "5555"
prometheus.io/scrape: "true"
name: broker
namespace: qiita
spec:
clusterIP: None
publishNotReadyAddresses: true
ports:
- port: 9092
protocol: TCP
targetPort: 9092
selector:
app: kafka
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" -n qiita apply -f kubernetes/kafka.yaml
service/broker created
service/kafka unchanged
poddisruptionbudget.policy/kafka unchanged
statefulset.apps/kafka configured
configmap/kafka-configmap unchanged
configmap/jmx-exporter-configmap unchanged
$ kubectl --kubeconfig="$HOME/.kube/k8s-1-16-2-do-0-lon1-1575482940993-kubeconfig.yaml" -n qiita get pods
NAME READY STATUS RESTARTS AGE
cockroach-init-fwjld 0/1 Completed 0 14h
cockroachdb-0 1/1 Running 1 14h
cockroachdb-1 1/1 Running 80 14h
cockroachdb-2 1/1 Running 0 14h
kafka-0 2/2 Running 0 6m7s
kafka-1 2/2 Running 0 5m30s
kafka-2 2/2 Running 0 5m16s
kafka-etcd-0 1/1 Running 29 14h
kafka-etcd-1 1/1 Running 0 14h
kafka-etcd-2 1/1 Running 1 14h
qiita-advent-calendar-2019-7d7d7b44b6-rgf9g 1/1 Running 0 14h
qiita-advent-calendar-2019-r6pkv 0/1 Completed 0 14h
zetcd-cc957f748-7nlxg 1/1 Running 0 14h
zetcd-cc957f748-lksmf 1/1 Running 0 14h
おお......。
というわけでService
リソースの設定ミスでした。失礼しました。
というわけで最近バズワードのKaaS(Kubernetes as a Service)の一つDigitalOceanが提供するサービスを使ってみました。
「触ってみた」程度ですがセットアップは非常に簡単で、ちょっとした環境が欲しいなってときには非常に便利だなと思いました。
いい息抜きになったので明日はアプリからKafkaを使っていきたいと思います。では。