k3s

Raspberry Pikubernetesクラスタを作っている人もいるくらいなので、そろそろkubernetesを初めてみようと思う。 まずは、簡単そうなk3sをやってみる。

準備

Ubuntu Server 18.04 LTSを普通にインストール。

k3sのインストール

ドキュメントに書いてある通りに、以下を実行する。

curl -sfL https://get.k3s.io | sh -

インストールは終わり。

構築する構成

シンプル?に Ingress(http/tcp) -> Service(http/tcp) -> Pod(http/tcp)の構成にしようと思う。

Pod

Podというかdeploymentを作る。そうするとイメージが Podとしてデプロイされる。 とりあえずnginxをデプロイ。

# 作ったら
sudo kubectl create deployment webserver --image nginx

# できたのを確認
sudo kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
webserver-d698d7bd6-rjht6   1/1     Running   0          14m

Service

Podを束ねる?サービスをPodから作る。

# 作ったら
sudo kubectl expose pod webserver-d698d7bd6-rjht6 --port=80 --target-port=80 --name=webserver

# できたのを確認
sudo kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1     <none>        443/TCP   9m15s
webserver    ClusterIP   10.43.69.55   <none>        80/TCP    3s

Ingress

k3sの外から入ってくる部分を作る。外部からのアクセスをServiceに渡す感じ。 これはコマンドではできないっぽい。

Ingressのファイルを作る。

cat <<'EOF' > ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: webserver-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: webserver
          servicePort: 80
EOF
# 定義を読み込ませる
sudo kubectl apply -f ingress.yml

# できたのを確認
sudo kubectl describe ingress webserver-ingress
Name:             webserver-ingress
Namespace:        default
Address:          192.168.1.16
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /   webserver:80 (10.42.0.8:80)

動作確認

curlでアクセスするとNginxの最初から入っているHTMLが返ってくるはず。

curl 192.168.1.16