Help us understand the problem. What is going on with this article?

LightsailにシングルノードKubernetesクラスターを作る

AWSのLightsailに毎月2000円ぐらいの仮想マシンを建てて、シングルノードKubernetesクラスターを作る話。

OSのコンソールに直接アクセスしてdockerコマンドとかを実行できるので開発環境には都合が良い。今回の個人的な用途はOperator SDKでの開発用。

記事作成時点のKubernetesバージョンは1.17。OSは訳あって、と言うかOperator SDKと相性良さそうというか、でCentOS 7。

Lightsailに仮想マシンを作る

https://lightsail.aws.amazon.com/ls/webapp/home/instances
OSのみ。CentOS 7 1901-01。月額$20の、4GB Memory、2 vCPUのインスタンスを作成。

Lightsailコンソールを開く

インスタンスが出来たらコンソールを開き、何はともあれsudo -iを実行。

$ sudo -i

Dockerとか、前提パッケージのインストール

https://kubernetes.io/docs/setup/production-environment/container-runtimes/
コマンドをコピペするときは、改行文字がCRLFで転送されない様に注意。notepad++の改行モードをUnix(LF)にして、それに貼り付けてから改めてLightsailコンソールに貼るとかね。

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
# yum update -y && yum install -y containerd.io-1.2.10 docker-ce-19.03.4 docker-ce-cli-19.03.4
# mkdir /etc/docker
# cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
# mkdir -p /etc/systemd/system/docker.service.d
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker

kubelet、kubeadmのインストール

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# systemctl enable --now kubelet
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl --system

Kubernetesのインストール

ネットワーク・ドライバーはcalico。

# kubeadm init --pod-network-cidr=192.168.0.0/16
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml

CoreDNSが起動している事を確認

calicoインストール後、暫くするとCoreDNSが起動する。

[root@ip-172-26-4-124 ~]# kubectl get pod -n kube-system
NAME                                                                      READY   STATUS  
  RESTARTS   AGE
calico-kube-controllers-5b644bc49c-wgfzv                                  1/1     Running 
  0          44s
calico-node-ktkgn                                                         1/1     Running 
  0          45s
coredns-6955765f44-mgpjr                                                  1/1     Running 
  0          2m52s
coredns-6955765f44-xszrk                                                  1/1     Running 
  0          2m52s
etcd-ip-172-26-4-124.ap-northeast-1.compute.internal                      1/1     Running 
  0          3m8s
kube-apiserver-ip-172-26-4-124.ap-northeast-1.compute.internal            1/1     Running 
  0          3m8s
kube-controller-manager-ip-172-26-4-124.ap-northeast-1.compute.internal   1/1     Running 
  0          3m7s
kube-proxy-qctwk                                                          1/1     Running 
  0          2m52s
kube-scheduler-ip-172-26-4-124.ap-northeast-1.compute.internal            1/1     Running 
  0          3m8s

taint解除

シングルノードクラスターのためMasterノードでアプリが起動する必要があり、taintを解除。

# kubectl taint nodes --all node-role.kubernetes.io/master-

動作確認

とりあえずnginx動かしてみてアクセスできるか。

# kubectl run nginx --image=nginx
# kubectl expose deploy/nginx --type=NodePort --port=80
# kubectl get svc
(最後のコマンドの出力結果)
[root@ip-172-26-4-124 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        57m
nginx        NodePort    10.96.212.196   <none>        80:30142/TCP   17m

手元のWebブラウザからアクセスするなら、NodePortで開いているポート番号(上の例なら30142)で仮想マシンにアクセスできるよう、Lightsailファイアウォールに許可するポートを追加。

で、「http://<インスタンスのIPアドレス>:<NodePort>」でWebブラウザからアクセスすれば以下の画面が表示される。
image.png

。。まあ、当初の目的がOperator SDK開発環境なので外部webアクセスは必要ないが。
Operator SDKのチュートリアルやってみましたを、気が向いたら日を改めて。

(追記)Kubernetes Operator SDKチュートリアルをやってみる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした