Kubernetes提示命令篇
GitHub(这是一个在线代码存储和版本控制平台)
■ moby/moby
■ kubernetes/kubernetes
概要
Kubernetesについて学んだTips的な記事です。
2つに分けて書く予定で1本目となります。
-
- Kubernetes技巧 命令篇
- Kubernetes技巧 yaml篇
特徴
-
- Immutable Infrastructure
-
- 宣言的設定 (⇔ Imperative)
- Auto Healing
[参考] Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
安装步骤
# hostsファイルの編集
$ vi /etc/hosts
# swap無効化
$ vi /etc/fstab
#UUID=07fc8b7b-40bc-4adb-b7fd-4c6c9973c021 /boot xfs defaults 0 0
$ swapoff -a
$ echo net.bridge.bridge-nf-call-iptables = 1 > /etc/sysctl.d/99-bridge-nf-call-iptables
# SELinux OFF
$ setenforce 0
$ sed -i ‘s/^SELINUX=enforcing$/SELINUX=permissive/’ /etc/selinux/config
# ファイアウォール停止/無効化
$ systemctl stop firewalld && systemctl disable firewalld
# dockerに必要なツールインストール
$ systemctl stop firewalld && systemctl disable firewalld
# dockerインストール
$ yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum install -y docker-ce
$ systemctl enable docker && sudo systemctl start docker
# kubernetesインストール前準備
$ sudo sh -c “cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
”
$ sudo sysctl –system
$ sudo sh -c “cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
”
# kubernetesインストール前準備
$ yum install -y kubelet kubeadm kubectl –disableexcludes=kubernetes
$ systemctl enable –now kubelet
Master
# 初期化処理
$ kubeadm init –apiserver-advertise-address ‘192.168.1.210’ –service-cidr ‘10.0.0.0/24’ –pod-network-cidr ‘172.16.0.0/24’
# –kubernetes-version : kubeadmのバージョン指定
# –apiserver-advertise-address : MasterのIPアドレス
# –service-cidr : VIP用を払い出す為にキープされるセグメント
# 初期化処理後の実行
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Worker
指令
設定関連
配置
contextはクラスタの情報、ユーザ、ネームスペースを組み合わせたものです。
この組み合わせで、どのKubernetesクラスタに接続するかが決まります
# 現在のコンテキスト
$ kubectl config current-context
# コンテキストの一覧
$ kubectl config get-contexts
# コンテキストの切り替え
$ kubectl config use-context [context]
# コンテキストの削除
kubectl config delete-cluster [context]
基本命令
获取信息
$ kubectl get all
# Deployment
# ReplicaSet
# Pod
# Service
# 上記4つをそれぞれ取得できる
播客
# podを作成
$ kubectl create -f [pod.yml]
# pod一覧表示
$ kubectl get pod
## -o wide 詳細表示
## -A 全namespaceの結果を取得
## --show-labels ラベルも表示
# podを削除
$ kubectrl delete pod [Pod名]
$ kubectl delete -f [作成時のPod定義ファイル]<Paste>
# Podを強制削除
$ kubectl get pod -grace-period 0 -force
# podの起動
$ kubectl run testnginx --image nginx
## --image= イメージを指定
## --replicas= 起動するPod数を指定
## --env= 環境変数を渡す
## --labels= ラベルをつけて起動
## --namespace= namespaceを指定して起動
# Podでコマンドを実行する
$ kubectl exec [Pod名] -it /bin/bash
# Podの詳細情報を取得
$ kubectl describe pod [Pod名]
命名空间
默认创建的命名空间如下所示。
-
- default Namespaceを持たないオブジェクトのデフォルト
-
- kube-system Kubernetesによって作成されたオブジェクのためのNamespace
- kube-public 全ユーザが読み込めるNamespace
# NameSpace作成
$ kubectl create namespace [namespace]
# NameSpace確認
$ kubectl get namespace
# NameSpace削除
$ kubectl delete namespace [namespace]
$ kubectl delete -f namespace.yml
## createのサブコマンド
### clusterrole
### clusterrolebinding
### configmap
### deployment
### job
### namespace
### poddisruptionbudget
### priorityclass
### quota
### role
### rolebinding
### secret
### service
### serviceaccount
副本集
为了保持Pod的副本数量的功能
# ReplicaSetを作成
$ kubectl create -f [rc.yml]
# rc一覧表示
$ kubectl get replicasets
服务
# サービスの作成
$ kubectl expose deployment [Pod名]
## --port
## --type
### サービスの種類
### clusterIP : Kubernetes クラスタ内からのみアクセス可能なVIPを割り振る
### nodePort : NodeのグローバルIP:Portで受付を行い、トラフィックを転送
### loadBalancer :
### externalName : 外部のサービスに対してのエイリアスを作成
玩耍Jenkins
apiVersion: v1
kind: Pod
metadata:
name: jenkins-pod
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins:latest
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
selector:
app: jenkins
ports:
- name: http
port: 8080
# Podを作成
$ kubectl apply -f jenkins_pod.yml
$ kubectl get pods -o wide | grep jenkins
jenkins-pod 1/1 Running 0 6m 10.1.0.22 docker-for-desktop
# Serviceを作成
$ kubectl apply -f jenkins_service.yml
$ kubectl get svc -o wide | grep jenkins
jenkins NodePort 10.100.58.177 <none> 8080:31854/TCP 7m app=jenkins
# Jenkinsのログイン情報を取得
$ kubectl exec -it jenkins-pod /bin/bash
$ jenkins@jenkins-pod:/$ cat /var/jenkins_home/secrets/initialAdminPassword
XXXXXXXXXXXXXXXXXX
请参考下面的文章。
请阅读以下文章。
■ [k8s] Pod < ReplicaSet < Deployment
■ 実践 Kubernetes ~コンテナ管理のスタンダードツールを使いこなす
■ Dockerfileを書くためのベストプラクティス【参考訳】v18.09
参考投影片
■ Docker Compose利用者から見た Kubernetes 開発環境構築入門
■ そのコンテナ、もっと「賢く」置けますよ?
■ Dockerfileを改善するためのBest Practice 2019年版
可以考虑的书籍
■ Docker/Kubernetes 实践容器开发入门
■ 入门 Kubernetes
■ Kubernetes完全指南
■ Kubernetes实践指南 支持云原生应用技术