LoginSignup
2
1

More than 3 years have passed since last update.

microk8s を Amazon Linux 2 にインストールしてIngressを起動するまで

Last updated at Posted at 2020-07-23

snapコマンドのインストール

こちらの記事のワンライナーでsnapコマンドをインストールする。
https://www.bonusbits.com/wiki/HowTo:Install_Snap_on_Amazon_Linux_Workspace

tag_version=v0.1.0 && \
rpm_version=2.36.3-0 && \
wget https://github.com/albuild/snap/releases/download/${tag_version}/snap-confine-${rpm_version}.amzn2.x86_64.rpm -P $HOME/Downloads && \
wget https://github.com/albuild/snap/releases/download/${tag_version}/snapd-${rpm_version}.amzn2.x86_64.rpm -P $HOME/Downloads && \
sudo yum -y install $HOME/Downloads/snap-confine-${rpm_version}.amzn2.x86_64.rpm $HOME/Downloads/snapd-${rpm_version}.amzn2.x86_64.rpm && \
sudo systemctl enable --now snapd.socket

microk8sのインストールと設定

Canonicalの公式リファレンス通りに microk8s のインストールコマンドを実行する。
https://microk8s.io/docs

sudo snap install microk8s --classic --channel=1.18/stable

この時、下記のエラーが出たが数分待ってから再度実行することでインストールに成功した。

error: too early for operation, device not yet seeded or device model not acknowledged

あとは公式ドキュメント通りに設定するが、AmazonLinux2に合わせて少しコマンドを改変。

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube

# aliasだとkubectlのプラグイン(krewなど)が動かないので、シェルスクリプトを作る方式の方が良いかも
echo alias kubectl="'microk8s kubectl'" >> $HOME/.bashrc
sudo su - $USER

よく使うaddonを有効化

microk8s enable dns storage ingress

Ingressの起動

Kubernetesの最小限の設定ファイルを作成してIngressを起動する。

deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: http-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
kubectl apply -f deploy.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

これでIngressが起動してパブリックIPから接続することができた。

トラブルシューティング

kubectl logs や kubectl exec が動作しない問題

DNS解決に失敗してlogs, execが動作しない問題が発生した。
AWSのVPCの「DNSホスト名の解決」が有効になっているか確認。
有効にして5分ほど待つとプライベートDNS名が解決されるようになり動作するようになった。

Nginx Ingress ControllerはがデフォルトでHTTPSへのリダイレクトを行う

Ingressに下記のアノテーションを入れることで回避できる

  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1