K3sをAWSのA1インスタンスで動かす

f:id:y-ohgi:20190325194225p:plain

About

AWSのARMインスタンス(a1系)でk3sを動かしてみる。
Raspberry Pi でk3sを動かしたいので、その前の動作確認としてAWS

K3sとは

f:id:y-ohgi:20190325194410p:plain

K8sの軽量版。
K8sから以下の5つを減らしてk3sらしい

  1. Legacy and non-default features
  2. Alpha features
  3. In-tree cloud providers
  4. In-tree storage drivers
  5. Docker (optional)

環境

  • k3s
    • 0.2.0
  • EC2
    • 2台
    • a1.medium
    • オレゴンリージョン(日本リージョンにはa1系 がないので)

構築

Server

# curl -sfL https://get.k3s.io | sh -
# k3s server &
# cat /var/lib/rancher/k3s/server/node-token
K101d42bdaa37af039d202xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Node

# curl -sfL https://get.k3s.io | sh -
# k3s agent --server https://172.31.41.18:6443 --token ${NODE_TOKEN}

動作確認

Server側にて

# k3s kubectl get nodes
NAME                                         STATUS   ROLES    AGE     VERSION
ip-172-31-41-18.us-west-2.compute.internal   Ready    <none>   20m     v1.13.4-k3s.1
ip-172-31-41-79.us-west-2.compute.internal   Ready    <none>   3m38s   v1.13.4-k3s.1
# k3s kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY   STATUS      RESTARTS   AGE
kube-system   coredns-7748f7f6df-wnf94         1/1     Running     0          19m
kube-system   helm-install-traefik-mppmq       0/1     Completed   0          19m
kube-system   svclb-traefik-7d5b84945c-tx6jg   2/2     Running     0          19m
kube-system   traefik-5cc8776646-p97hc         1/1     Running     0          19m

nginxを動かす

デプロイ

DaemonSetとServiceを動かします。

Raspberry Pi で動かしたくて、台数分動かしたかったのでDaemonSetを使用。
IngressとしてTraefikが使えそうなのですが、とりあえずラズパイのホスト毎にトラフィックを受けてみたかったのでNodePortを固定。

# cat <<EOL | k3s kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:

metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx

spec:
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service

metadata:
  name: nginx

spec:
  type: NodePort
  selector:
    run: nginx
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30000
      targetPort: 80
EOL

podとserviceを見て動いてることを確認。

# k3s kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
nginx-2wnfr   1/1     Running   0          9s
nginx-c64rj   1/1     Running   0          9s
# k3s kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.43.0.1     <none>        443/TCP        124m
nginx        NodePort    10.43.65.97   <none>        80:30000/TCP   16s

今回は30000ポートを開けたので確認する

f:id:y-ohgi:20190325194205p:plain

所感

めっちゃ楽。
これからRaspberry Pi で動かしてみます。