Table of Contents
- 巷では、Kubernetesを使い始めているのでそろそろ勉強する。Dockerは使ったことあるけど、Kubernetesはじめてです。ゆくゆくはGKEで運用するが、まずはMinikubeを使いローカルで勉強する。
-
環境
- Mac(mojave)
- minikube v0.35.0
- kubernetes v1.13.4
Minikube、kubectl のインストール
# brewを使ってkubernetes-cliをインストール
brew install kubernetes-cli
# Minikubeをインストールする
brew cask install minikube
# minikubeのバージョン確認
minikube version
minikube version: v0.35.0
# kubectlのバージョン確認
kubectl version --client
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-03-01T23:34:27Z", GoVersion:"go1.12", Compiler:"gc", Platform:"darwin/amd64"}
# Minikubeを起動
minikube start
# Minikubeを起動 オプションでcpuのコア数、メモリ、Kubernetesのバージョン、VMなどが指定もできる
minikube start --cpus 2 --memory 4096 --kubernetes-version v1.13.4 --vm-driver virtualbox
# KubernetesのGUIコンソールを起動
minikube dashboard
# ノードを確認
kubectl get nodes
# Minikubeを停止
minikube stop
Pod を作成
- Manifest を使って Pod を作成する
pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
apiVersion
- Object の Group と Version
kind
- kind は作成する Object 名を指定する。指定については対象の Object の Kind を参照する。今回は Pod を作成するために Pod を指定
metadata
- metadata は Object の Metadata を指定す
- matadata.name には今回 nginx のイメージを使った Pod ということで nginx
spec
- spec はオブジェクトの期待する状態を定義
Container
Container をファイルに追加してみる
- Container を新しいファイル
pod-nginx-container.yaml
に設定してみる
pod-nginx-container.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-container
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: Always
command: []
args: ["nginx", "-g", "daemon off;"]
env:
- name: HOGEHOGE
value: fugafuga
ports:
- containerPort: 80
protocol: TCP
workingDir: /tmp
Container を追加した Pod を作成する
# podを作成
kubectl apply -f pod-nginx-container.yaml
# podを確認
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx 1/1 Running 0 3s
# kubectl exec コマンドで指定のPodの中のコンテナ内にプロセスを起動させることができる
kubectl exec nginx ps
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off;
7 nginx 0:00 nginx: worker process
8 root 0:00 ps
# 環境変数を確認`HOGEHOGE=fugafuga`
kubectl exec nginx env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx
HOGEHOGE=fugafuga
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
NGINX_VERSION=1.15.12
HOME=/root
# ワーキングディレクトリを確認
kubectl exec nginx readlink /proc/1/cwd
/tmp
command
- Entrypoint の配列を指定。コンテナで起動させたいプロセスを指定する。
args
- 引数の配列を指定。このフィールドを省略すると、Docker イメージの CMD が使用される。
env
- コンテナ内の環境変数を指定する。
image
- コンテナイメージ名を指定する。
imagePullPolicy
- コンテナイメージを Pull するポリシーを指定する。以下の 3 つから選択する。
- Always: 常にコンテナイメージを Pull する
- IfNotPresent: 既にコンテナイメージがあれば Pull を実行しない
- Never: Pull を実行しない。ローカルにコンテナイメージがあることを期待する
name
- コンテナ名を指定する
ports
- コンテナから expose するポートを指定。
- containerPort : Pod の IP から Expose するポート番号を指定
- name : Named Port として利用する際の名前を指定。Pod 内でユニークである必要がある
- protocol : ポートのプロトコルを指定。 TCP / UDP / SCTP から指定する。デフォルトは TCP
ports:
- name: http
containerPort: 8080
workingDir
- コンテナのワーキングディレクトリを指定