# 前言
Kubernetes 的學習筆記, 內容未整理
# 環境
OS: MacOS
Hypervisor: VMware Fusion
# 安裝
# 安裝虛擬機
確認 macOS 有無支援虛擬機
sysctl -a | grep -E --color 'machdep.cpu.features|VMX'
# 安裝 minikube
brew cask install minikube |
# 安裝 kubectl
這邊是直接安裝 gcloud sdk, 參考文件
設定
kubectl auto completion
打開zshrc
vim ~/.zshrc
加入設定檔
source <(kubectl completion zsh) |
# 啟動 minikube
- 啟動
minikube start --vm-driver=<driver_name>
, 在這個例子中, 就是minikube start --vm-driver=vmwarefusion
# kubectl
# config
顯示目前有的 contexts
kubectl config get-contexts
取得目前套用的 contexts
kubectl config current-contexts
刪除指定 contexts
kubectl config delete-contexts
從 kubeconfig 刪除指定叢集
kubectl config delete-cluster
取得 kubeconfig 中定義的叢集
kubectl config get-clusters
從 kubeconfig 檔案中重新命名 context
kubectl config rename-context
# create
create -f FILENAME
- 建立元件
kubectl create component componentName
# secret generic
generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]
- 建立一個 secret, 基於一個檔案, 資料夾, 或是指定的值
- 一個單一個 secret 可能會包含一個或多個 key/value 組
- 當基於檔案建立 secret, key 預設會是檔案名稱, value 為檔案內容
- 如果檔名是不合法的, 而你希望選擇你自己的, 可以自己指定
- 當基於資料夾建立 secret 時. 每個資料夾內合法的檔名都會成為一個 key, 被打包進 secret, 任何除了 regular file 之外的內容都會被忽略 (e.g. subdirectories, symlinks, devices, pipes, etc).
# configMap
# logs
取得 log
kubectl logs componentName
取得即時 log
logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]
kubectl logs -f componentName |
# exec
exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]
# 元件
# Pod
# Service
# Dashboard
# 安裝
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml |
# 開啟
kubectl proxy |
# 取得 token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}' |
# Kubectl CLI
# YAML
YAML 檔案支援使用 Tab 縮進嗎?
不支援YAML 檔案中, 什麼是註解?
#
以下的 YAML 格式, 若使用 JSON 呈現的話, 是如何?
{
"apiVersion": "v1",
"kind": "pod"
}
---
apiVersion: v1
kind: Pod以下的 YAML 格式, 若使用 JSON 呈現的話, 是如何?
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "kube100-site",
"labels": {
"app": "web"
}
}
}
---
apiVersion: v1
kind: Pod
metadata:
name: kube100-site
labels:
app: web以下的 YAML 格式, 若使用 JSON 呈現的話, 是如何?
{
"args": ["Cat", "Dog", "Fish"]
}args
- Cat
- Dog
- Fish以下的 YAML 格式, 若使用 JSON 呈現的話, 是如何?
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "kube100-site",
"labels": {
"app": "web"
}
},
"spec": {
"containers": [{
"name": "front-end",
"image": "nginx",
"ports": [{
"containerPort": 80
}]
}, {
"name": "flaskapp-demo",
"image": "jcdemo/flaskapp",
"ports": [{
"containerPort": 5000
}]
}]
}
}
---
apiVersion: v1
kind: Pod
metadata:
name: kube100-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: flaskapp-demo
image: jcdemo/flaskapp
ports:
- containerPort: 5000
# 靜態 Pod
Kubernetes 中, 靜態 Pod 可以通過 kubectl 管理嗎?
不行Kubernetes 中, 如何建立靜態 pod?
在 node 的/etc/kubernetes/manifests
資料夾中, 新增 YAML 檔Kubernetes 中, 如何刪除靜態 pod?
將該 YAML 檔案移除Kubernetes 中, 靜態 pod 由誰管理?
特定節點上的 kubelet
# RBAC
Kubernetes 中, RBAC 的全寫是什麼?
Role-based access controlKubernetes 中, 如何啟用 RBAC?
在 apiserver yaml 檔案中添加--authorization-mode=RBAC
Kubernetes 中, Role 和 ClusterRole 的差別?
Role 適用於單個命名空間, ClusterRole 適用於整個叢集Kubernetes 中, 叢集中有哪三種 subject 資源?
User Account, Group, Service Account
# Questions and Answers
In Kubernetes, 如何列出 pods?
kubectl get pods
In Kubernetes, 如何暴露一個 deployment, 並建立一個外部的平衡負載?
kubectl expose deployment nginx –port 80 –type LoadBalancer
In Kubernetes, 如何列出 service?
kubectl get services
In Kubernetes, Pod 內可以裝幾個容器?
一個或多個
In Kubernetes, 什麼元件提供了 namespace?
Pods
In Kubernetes, 一個 Pod 有幾個 IP?
一個
In Kubernetes, 如何利用 YAML 檔案建立一個 pod
kubectl create -f configFile.yaml
In Kubernetes, 如何取得物件的更多資訊?
kubectl describe component componentName
In Kubernetes, 假設我本地的 port 為 10080, Pod 的 port 為 80, 如何將兩個連接起來?
kubectl port-forward podName 10080:80
In Kubernetes, 如何取得 log
kubectl logs [-f] componentName
In Kubernetes, 如何在容器內開一個 shell?
kubectl exec podName -c containerName -it –stdin /bin/sh
In Kubernetes, Service 的作用?
提供端點給 Pods
In Kubernetes, Service 如何選擇 Pod?
利用 label
In Kubernetes, Service 提供給 Pod 的存取等級, 有幾種?
三種
In Kubernetes, Service 提供的存取等級中, ClusterIP 有誰可以看見?
只能在叢集內部
In Kubernetes, Service 提供的存取等級中, NodePort 有誰可以看見?
給予叢集內的節點一個外部可以存取的 IP
In Kubernetes, Service 提供的存取等級中, LoadBalancer 有誰可以看見?
從雲端提供者那增加一個平衡負載, 將外部流量經由 Service 導向節點
In Kubernetes, Volume 的生命週期?
跟 Pod 共存亡
kubernetes 中, 同一個 pod 內的 container 可以啟用相同的 port 嗎?
不可, 因為共享一個空間, 若 port 相同會衝突
kubernetes 中, replicaSet 是什麼?
Pod 副本的抽象, 用以擴縮 Pod
留言