k8s
https://gyazo.com/6a95afaa823f1f6c6e4337a279ce61de
リソース
Workloads
Deployment > ReplicaSet > Pod
CronJob > Job > Pod
ReplicationController > Pod
DaemonSet > Pod
StatefulSet > Pod
Service
Service (L4, TCP/IP)
type がいろいろ ClusterIP, ExternalIp, NodePort, LoadBalancer, Headless, etc
Ingress (L7, HTTP)
Config & Storage
Secret
ConfigMap
PersistentVolumeClaim
Cluster
Node, Namespace, ServiceAccount
Metadata
HorizontalPodAutoscaler, PodDistruptionBudget
kustomize
kustomize build . | kubectl diff -f -
kustomize build . | kubectl apply -f -
kustomize edit set image app:hoge
で newTag: hoge にしてくれる
Pod が起動しない時
kubectl logs
アプリケーション等の書くのログを見る
kubectl describe イベントを見る
リソースがないとかノードがないとかマウントに失敗したとか
kubectl run 中に入ってデバッグ
$ kubectl run -it --rm --image=nginx:1.16 --restart=Never sample-debug --command -- /bin/sh
$ kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- /bin/bash
cronjob をすぐ実行する
$ kubectl create job --from=cronjob/<name of cronjob> <name of job>
べんり
ヘルスチェック
CRD
is 何 → Custom Resource Definition
GKE の kind: BackendConfig とか リソースについて
メモリはOOM怖いならオーバーコミットすべきでない
env, envFrom
備考: envまたはenvFromフィールドを使用して設定された環境変数は、コンテナイメージで指定された環境変数を上書きします。
command, args
command は ENTRYPOINT / argsは CMD に対応
省略するとどちらもイメージのものが使われるはず
時は2020年
kustomize edit はパス指定できない
諦めて $(cd manifest/overlays/dev && kustomize edit set image ...) みたいにする
Insufficient cpu
WIP
$ kubectl describe nodes などでリソース状況を見る
VPA
Vertical Pod Autoscaler
updatePolicy.updateMode: "Off" にして様子見ている
kustomize でパッチを当てる
kustomize supports patching via either a strategic merge patch (wherein you partially re-specify the thing you want to modify, with in-place changes) or a JSON patch (wherein you specify specific operation/target/value tuples in a particular syntax).
↑ patchesStrategicMerge と patchesJson6902 の違いはこの1文が分かりやすい
patchesStrategicMerge
kind & metadata.name を元にマージ対象を決める?
意外と $patch: delete で削除もできる
patchesJson6902
適用する target とパッチ(op, path, value)を指定する
やりたいことに対して宣言する内容が多い気がするけど意図は分かりやすいか
patchesStrategicMerge でネストしたリソースの一部フィールドを消すのはネストした定義を作って内側で delete する(マージした結果消える yaml を作る)けど、こちらは op: delete して path, value を指定する
patches 👆のどちらか自動的に検出する
よくやる kubectl run
$ kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- /bin/bash
$ kubectl run -it --rm --image=docker.io/redis --restart=Never redis-cli -- /bin/sh
ツール類
kind
kubenetes in docker
ローカルでマルチノードを試せる
metrics 系 API は使えない?
練習に便利
$ kind create cluster --config kind.yaml --name kindcluster
$ kubectl config use-context kind-kindcluster
krew
kubectl plugin マネージャー, krew 自体もプラグイン
$ kubectl krew install ctx で kubectx をインストール stern
ログを便利に見るやつ
$ stern QUERY [flags]
QUERY で pod を絞り込む、正規表現書ける
--tail
--all-namespaces
-c CONTAINER
kustomize
2020/10/13
brew で入るのは 3系
kube-ps1
kubeon / kubeoff で切り替え
code:zshenv.sh
# kube-ps1
export KUBE_PS1="/usr/local/opt/kube-ps1/share/kube-ps1.sh"
source $KUBE_PS1
fi
code:zshrc.sh
# precmd などで
PROMPT='$(kube_ps1)'$PROMPT
fi;
# GKE の生成するクラスタ名が長いので短くする
_kube_ps1_get_cluster_short() {
if $1 =~ "^gke_" ; then
# GKE {project}.{cluster}
echo "$1" | cut -d_ -f2,4 --output-delimiter='.'
else
echo "$1"
fi
}
export KUBE_PS1_CLUSTER_FUNCTION=_kube_ps1_get_cluster_short