LoginSignup
9
3

More than 3 years have passed since last update.

Ubuntu 18.04 のKubernetes環境を構築してみた!

Last updated at Posted at 2019-12-13

この記事は、富士通システムズウェブテクノロジー Advent Calendarの14日目の記事です。
(お約束)本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。

部署の業務には関係はないですが、自分の趣味でこの記事を書きました。

必要なものについて

VMware Workstation 15 Playerのインストール

ubuntu18.04のイメージのダウンロード

仮想マシン2台の用意&環境構築

1、ubuntu18.04のインストール(masterノードとworkノード)

①VMware Workstationでubuntu18.04のイメージを使い仮想マシンを作成します。

※仮想マシンのCPUの個数は2以上にする必要があります。
それにメモリを4GB以上にしたほうがいいと思います。
image.pngimage.png

②ubuntuのsoftwareをアップデートします

「install Now」を選択します。
image.png

③host名の変更

※二台の仮想マシンのhost名が同じの場合、後でworkノードをmasterノードにjoinできなくなりますので、masterNodeとworkNode1に変更、変更後に再起動を行います。
image.pngimage.png

2、Dockerのインストール

①必要なライブラリをインストール

$ sudo apt update 
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

②公開鍵のインストールとフィンガープリントの確認

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

③Docker-ceのインストール

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt install -y docker-ce=18.06.0~ce~3-0~ubuntu

④cgroupdriverの設定

$ cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

$ mkdir -p /etc/systemd/system/docker.service.d

⑤Dockerの再起動

$ systemctl daemon-reload
$ systemctl restart docker

3、Kubernetesのインストール

①kubernetes のキーとリポジトリの登録

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

②Kubernetesのインストール

$ sudo apt update
$ sudo apt install -y kubeadm

③swapをオフにします

$ vi /etc/fstab

swapに該当する行を#でコメントアウトし、再起動を行います。
image.png

クラスターのセットアップ

1、masterNodeのセットアップ

①クラスターの生成

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
実行結果
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.177.133:6443 --token imzh6v.j1jbcrvc1z5rla31 \
    --discovery-token-ca-cert-hash sha256:455e7f5f25a92ff919748f0ae8db5e1948f64b62c20c2fe7edbd9868efe0f30d 

②設定ファイルの配備

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

③flannelを使用

$ sudo sysctl net.bridge.bridge-nf-call-iptables=1
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

※flannelを適用するために一分ぐらい時間がかかるので、しばらく待つ必要があります。

④masterNodeの状態確認

$ kubectl get nodes
実行結果
NAME         STATUS   ROLES    AGE     VERSION
masternode   Ready    master   2m48s   v1.17.0

2、workNode1をmasterNodeにjoin

①masterNodeで生成したコマンドでjoinします。

$ kubeadm join 192.168.177.133:6443 --token imzh6v.j1jbcrvc1z5rla31 \
    --discovery-token-ca-cert-hash sha256:455e7f5f25a92ff919748f0ae8db5e1948f64b62c20c2fe7edbd9868efe0f30d 

②masterNodeでworkNode1のjoinを確認

$ kubectl get nodes
実行結果
NAME         STATUS   ROLES    AGE   VERSION
masternode   Ready    master   14m   v1.17.0
worknode1    Ready    <none>   94s   v1.17.0

補足:

kubernetesの環境をリセットしたい場合は下記のコマンドを使います。

$ kubeadm reset

複数のnginxをデプロイしてみよう!

①deploymentファイルの作成

nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

replicas:同じコンテナを三つ立ち上げるのを指定します。
selector:管理するコンテナを指定します。(例だとラベルはapp: nginxのコンテナをマッチ)
template: spec:nginxのコンテナを起動するのを指定します。

② deploymentのyamlファイルを実行

$ kubectl create -f nginx-deployment.yaml
実行結果
deployment "nginx-deployment" created

③deploymentsの確認

$ kubectl get deployments
実行結果
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           105s

④serviceファイルの作成

nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  sessionAffinity: ClientIP
  selector:
    app: nginx
  ports:
    - port: 80
      nodePort: 30080

kind:Serviceを作成するのを指定
nodePort:外部アクセスする際のポートを指定

⑤ serviceのyamlファイルを実行

$ kubectl create -f nginx-service.yaml
実行結果
service/nginx-service created

⑥serviceの確認

$ kubectl get service
実行結果
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        120m
nginx-service   NodePort    10.96.118.142   <none>        80:30080/TCP   76s
$ kubectl get pods
実行結果
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-54f57cf6bf-k72mv   1/1     Running   0          17m
nginx-deployment-54f57cf6bf-krj9r   1/1     Running   0          17m
nginx-deployment-54f57cf6bf-wmwsg   1/1     Running   0          17m

⑦外部からnginxをアクセス

ステップ⑥からすでにport(30080)を確認できましたので、
masterNodeのIP(192.168.177.133)とそのportで外部マシン(ローカルPC)からアクセスします。
image.png

以上となります。

参考

Ubuntu 18.04 LTS にKubernetes環境をインストールする [Master / Worker]
Ubuntu 18.04 LTS にDocker環境をインストールする
k8s 使用篇 - deployment

9
3
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
9
3