目次
k8s のバージョンは以下。
[root@azki k8s]# microk8s kubectl version
Client Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.3-3+90fd5f3d2aea0a", GitCommit:"90fd5f3d2aea0a5788b15a6f0a05e70381af7787", GitTreeState:"clean", BuildDate:"2021-07-16T22:06:06Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.3-3+90fd5f3d2aea0a", GitCommit:"90fd5f3d2aea0a5788b15a6f0a05e70381af7787", GitTreeState:"clean", BuildDate:"2021-07-16T22:01:05Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Microk8s のインストール
インストールは公式の手順に従うだけ。今回は Fedora Server 34 で試した。snap で配布されているので dnf install snapd する必要がある。
# dnf install snapd
# systemctl enable --now snapd
# snap install microk8s --classic
インストールしたらここを参考に初期セットアップ。
# microk8s status --wait-ready
# microk8s enable dashboard dns registry istio
Ingress の有効化
# microk8s enable ingress
定義ファイルの準備
とりあえずチュートリアルとドキュメントのサンプルを見様見真似で。
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: microbot
name: microbot
spec:
replicas: 3
selector:
matchLabels:
app: microbot
template:
metadata:
labels:
app: microbot
spec:
containers:
- image: dontrebootme/microbot:v1
name: microbot
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: microbot
name: microbot-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: microbot
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: microbot-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /microbot(\/.*)
pathType: Prefix
backend:
service:
name: microbot-service
port:
number: 80
サービスの実行
# microk8s kubectl apply -f deployment.yaml -f service.yaml -f ingress.yaml
http://127.0.0.1/microbot/ にアクセスして以下のような画面が出たら成功。
replicas: 3 を指定しているので、ページをリロードしまくると hostname が全3種に変わる。
トラブルシュート
502 Bad Gateway になる
おそらく Fedora (というか firewalld か?) 特有の問題。Ubuntu 21.04 では再現しなかった。
雑なワークアラウンドは以下。
# systemctl stop firewalld
firewalld を止めた・設定変えたら Ingress が Connection refused を返してくるようになった
# microk8s disable ingress
# microk8s enable ingress
503 Service Unavailable になる
Pod が立ち上がっていないかもしれないからもう少し待つ。
待ってもダメなら ingress.yaml に指定するサービス名 (backend.service.name) が間違ってる可能性あり。
画像が出ない
nginx.ingress.kubernetes.io/rewrite-target の指定が誤ってる可能性あり。上記のサンプルのようにサブディレクトリ以下でサービスを公開する場合は、適切な rewrite をかけないといけない。
Tweet