kubernetes(k8s)入門
このぺーじでは、katacodaと呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してKubernetes Introduction Get started using Kubernetesを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ
Launch A Single Node Cluster
ここでは、DNSやKube UIを含むシングルノードMinikubeクラスタの起動方法を学習する
Minikubeは、ローカルでKubernetesを簡単に実行できるツールです。Minikubeは、ラップトップ上のVM内でシングルノードのKubernetesクラスタを実行します。
このシナリオで学習することをさっと確認する場合は概要を確認
概要
- ローカル環境でk8sのシングルクラスターを構築可能
- クラスタの構築には、
minikube start
を用いる - k8sクラスタの管理には、kubectlを利用。
kubectl cluster-info
コマンドでクラスタの情報を確認できる - それぞれのリソースの情報を確認する際は、
kubectl get <resource>
で確認(には、pods,service,deployment,nodesが当てはまる) - minikubeには、k8sマルチクラスタ同様アドオン機能が用意されている
- アドオン機能の操作には
minikube addons <操作内容(list,enable dashboard 等)>
で利用
- アドオン機能の操作には
Minikubeの開始
本環境では、既にMinikube
がダウンロード済みで初期設定も終了している
下記コマンドの通り、minikube version
でダウンロード済みのminikubeの情報を確認した後、minikube start
でシングルクラスタを展開する
minikube start
で用いるオプション--wait
の引数には、"apiserver,system_pods,default_sa,apps_running,node_ready,kubelet"
があり、指定した要素の検証をクラスタ開始までに済ませるか否かを決めることが可能
デフォルトでは、"apiserver,system_pods"の検証が行われる
$ pwd
/root
$ minikube version
minikube version: v1.8.1
commit: cbda04cf6bbe65e987ae52bb393c10099ab62014
$ tree .minikube/
.minikube/
├── addons
├── apiserver.crt
├── apiserver.key
├── cache
│ ├── iso
│ ├── linux
│ │ └── v1.17.3
│ │ ├── kubeadm
│ │ ├── kubectl
│ │ └── kubelet
│ └── preloaded-tarball
│ ├── preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4
│ └── preloaded-images-k8s-v1-v1.17.3-docker-overlay2.tar.lz4.checksum
├── ca.crt
├── ca.key
├── certs
│ ├── ca-key.pem
│ ├── ca.pem
│ ├── cert.pem
│ └── key.pem
├── client.crt
├── client.key
├── config
│ └── config.json
├── files
├── logs
├── machines
├── profiles
├── proxy-client-ca.crt
├── proxy-client-ca.key
├── proxy-client.crt
└── proxy-client.key
12 directories, 20 files
$ ls -a
. .. .bashrc .cache .config Desktop .docker .gnupg .hushlogin .minikube .profile .ssh .vnc .vscode
$ minikube start --wait=false
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
- kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Done! kubectl is now configured to use "minikube"
$
Cluster情報の確認
k8sクラスタは、kubectl CLIを使用して管理します。
展開したk8sクラスタの詳細とその状態を確認し、ノードの状態を下記の通り確認
$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.21:8443
KubeDNS is running at https://172.17.0.21:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 11m v1.17.3
コンテナの展開
ここでは、起動中のクラスタでコンテナを実行する
コンテナの起動では、podの代わりにdeploymentリソースを利用。
deploymentは、podと異なりバージョン管理やレプリカ数も管理可能。理解のためには、こちらを参照
現在の状態は下記の通り
$ kubectl get deployment
No resources found in default namespace.
$ kubectl get pods
No resources found in default namespace.
$ docker image ls | grep docker-http-server
イメージがローカルレジストリに存在しないことも上記コマンドから判明
$ kubectl create deployment first-deployment --image=katacoda/docker-http-server
deployment.apps/first-deployment created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
first-deployment-666c48b44-szjwz 1/1 Running 0 6s
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
first-deployment 1/1 1 1 17s
$ docker images ls | grep docker-http-server
$ docker image ls | grep docker-http-server
katacoda/docker-http-server latest 0d6ee549ae13 4 years ago 7.59MB
deploymentを作成することで、podが起動され、内部にイメージがダウンロードされていることも確認できる
コンテナが実行されると、要件に応じて異なるネットワーキングオプションを介して公開することができます。
一つの可能性のある解決策は、コンテナにダイナミックポートを提供する NodePort です。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17m
$ kubectl expose deployment first-deployment --port=80 --type=NodePort
service/first-deployment exposed
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
first-deployment NodePort 10.97.89.102 <none> 80:32550/TCP 9s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17m
コンテナの接続はこちらから確認できる
$ export PORT=$(kubectl get svc first-deployment -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
$ echo "Accessing host01:$PORT"
Accessing host01:32550
$ curl host01:$PORT
<h1>This request was processed by host: first-deployment-666c48b44-szjwz</h1>
dashboardの利用
minikube上でダッシュボードを利用するために、dashboard機能をアドオンする
$ minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| dashboard | minikube | disabled |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gvisor | minikube | disabled || helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled || istio-provisioner | minikube | disabled |
| logviewer | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled || nvidia-gpu-device-plugin | minikube | disabled |
| registry | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ || storage-provisioner-gluster | minikube | disabled |
|-----------------------------|----------|--------------|
$ minikube addons enable dashboard
* The 'dashboard' addon is enabled$ minikube addons list | grep dashboard
| dashboard | minikube | enabled ✅ |
以下のYAML定義をデプロイしてKubernetes Dashboardを利用できるようにします。これはKatacoda上でのみ使用する必要があります。
apiVersion: v1
kind: Namespace
metadata:
labels:
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/minikube-addons: dashboard
name: kubernetes-dashboard
selfLink: /api/v1/namespaces/kubernetes-dashboard
spec:
finalizers:
- kubernetes
status:
phase: Active
---
apiVersion: v1
kind: Service
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard-katacoda
namespace: kubernetes-dashboard
spec:
ports:
- port: 80
protocol: TCP
targetPort: 9090
nodePort: 30000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
Kubernetesダッシュボードでは、アプリケーションをUIで表示することができます。今回のデプロイでは、30000番ポートでダッシュボードが利用可能
ダッシュボードを起動し確認するため、下記コマンドを実行
$ kubectl apply -f /opt/kubernetes-dashboard.yaml
namespace/kubernetes-dashboard configured
service/kubernetes-dashboard-katacoda created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
first-deployment NodePort 10.97.89.102 <none> 80:32550/TCP 35m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 52m
$ kubectl get pods -n kubernetes-dashboard -w
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b64584c5c-6sfk7 1/1 Running 0 6m30s
kubernetes-dashboard-79d9cd965-pf4mv 1/1 Running 0 6m29s
ダッシュボードはこちらのリンクから移動