この記事は、富士通システムズウェブテクノロジー Advent Calendarの14日目の記事です。
(お約束)本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。
部署の業務には関係はないですが、自分の趣味でこの記事を書きました。
#必要なものについて
###VMware Workstation 15 Playerのインストール
https://www.vmware.com/jp/products/workstation-player/workstation-player-evaluation.html
###ubuntu18.04のイメージのダウンロード
https://jp.ubuntu.com/download
#仮想マシン2台の用意&環境構築
###1、ubuntu18.04のインストール(masterノードとworkノード)
①VMware Workstationでubuntu18.04のイメージを使い仮想マシンを作成します。
※仮想マシンのCPUの個数は2以上にする必要があります。
それにメモリを4GB以上にしたほうがいいと思います。
②ubuntuのsoftwareをアップデートします
③host名の変更
※二台の仮想マシンのhost名が同じの場合、後でworkノードをmasterノードにjoinできなくなりますので、masterNodeとworkNode1に変更、変更後に再起動を行います。
###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に該当する行を#でコメントアウトし、再起動を行います。
#クラスターのセットアップ
###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ファイルの作成
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ファイルの作成
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)からアクセスします。
以上となります。
#参考
Ubuntu 18.04 LTS にKubernetes環境をインストールする [Master / Worker]
Ubuntu 18.04 LTS にDocker環境をインストールする
k8s 使用篇 - deployment