akiranetの日々淡々と頑張っていこう

akiranetのコンピューターと遊ぶ

KVM上でkubeadmを用いてkubernetesを構築&Dashboard

1. 環境

環境としては以下のように作りました。

f:id:akiranet:20180528210258p:plain

今回は構築してみたかっただけなので、

  • k8s-master 1台
  • k8s-node 1台 で行いました。

KVMのホストOSとしては、ubutntu16.04, KVMのゲストOSとしてはCentOS7.5を使いました。

KVMの立て方がわからない方などは以下のサイトが構築において一番わかり易いので、是非参考にしてほしいです。

Ubuntu 16.04 : KVM インストールと設定 : Server World

CentOS 7 : KVM インストールと設定 : Server World

2. kubernetes

シンプルに最初やろうとしたのですが、深夜にやっていたので頭が働かずうまくできなかったorz

簡単にやるならkubeadmやminikubeがあるらしいということのなのでそっちでやってみることにしました。
  ↓ kubeadmが何やってるかでよく参考に挙げられてるURL

kubeadmが何をやっているのかみてみた

以下をみれば構築は簡単にできるので正直そっちだけでよいです

www.n-novice.com

物好きは以下を読んでください。

1. /etc/hostsの設定

sudo vi /etc/hosts
--------------------------
xxx.xxx.xxx.xxx master
xxx.xxx.xxx.xxx node1
---------------------------

2. SELinuxとFWを停止

setenforce 0
sudo systemctl stop firewalld
sudo systemctl disable firewalld

3. swap off

kubeletがどうやら動かないらしいので停止

sudo swapoff -a

以下をやることで再起動後もswapがオフになる

sudo vi /etc/fstab
コメントアウトする
----------------------------
#UUID=xxxxxxxxxxxxxxxxxxxxxxxxxxxx swap

4. docker, kubectl, kubelet, kubeadmインストール

sudo vi /etc/yum.repo.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
sudo yum install kubelet kubeadm kubectl docker -y

5. docker kubelet起動

以下を起動させておかないとkubeadm initでエラー

sudo service start kubelet
sudo service enable kubelet
sudo service start docker
sudo service enable docker
sudo vi /etc/sysctl.conf
----
net/bridge/bridge-nf-call-ip6tables = 1
net/bridge/bridge-nf-call-iptables = 1
net/bridge/bridge-nf-call-arptables = 1
---

sudo sysctl --system

6. kubeadm マスター作成

api~でMasterの指定とflannelでのネットワークのオプションをつける

sudo kubeadm init  --apiserver-advertise-address=master --pod-network-cidr=<flannel上でのネットワークアドレス(Ex: 10.0.0.0/16)>

NodeをJOINするためのコマンドなどが表示されるのでメモ!

7. k8s起動確認

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
sudo kubectl get nodes

8. flannel

curl -L -O https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
curl -L -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml

sudo vi kube-flannel.yml
以下を書き換え
-----
"Network": "10.0.0.0/16",
kubectl apply -f kube-flannel-rbac.yml
kubectl apply -f kube-flannel.yml

起動確認
kubectl get pod --all-namespaces

9. NodeをJOIN

sudo kubeadm join <masterのIP>:6443 --token lhpf9t.3r8gs3lq7flbyof2 --discovery-token-ca-cert-hash sha256:bc6fd0423fd290f740b4390382e38879daf108344718243461730ff020b770b9

10. nginxのPodを立ててみる

vi nginx-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
 name: nginx-pod
spec:
 containers:
 - name: nginx-container
   image: nginx
   ports:
   - containerPort: 80
kuctl get pods -o wide
---
NAME        READY     STATUS    RESTARTS   AGE       IP           NODE
nginx-pod   1/1       Running   1          3d        10.0.1.20   node1
---

curl 10.0.1.20
---
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
---
3. DashBoard

こちらも以下を参考にすればできます。 /etc/hosts内に書き込んだmasterとnodeの対応を消さないとどうやらk8s内で動いているkube-dnsが原因でうまく行かないらしいので、/etc/hostsの対応を消せばうまく動きます。

www.n-novice.com

できるとこんな感じ。

f:id:akiranet:20180528224009p:plainf:id:akiranet:20180528224009p:plain

4. 感想

kubeadmならこんな簡単にできました。。。 ただ本番環境には使わないでねって書いてあるので、もしも本番環境で使う時のためにkubeadmを使わないでねの方法も勉強したいと思います. 他の人が書いてくれたブログの通りやれば簡単にできるので、世の人々強いなって感じですよ

次やる時は、k8sの良い使い方をいろいろ考えてから一から建てたいと思います!!!