0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-22

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のインストール

# 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チュートリアルをやってみる

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?