資源類型 | 資源簡稱 |
---|---|
node | no |
namespaces | ns |
deployment | deploy |
ReplicaSet | rs |
pod | po |
service | svc |
ingress | ing |
DaemonSets | ds |
StatefulSets | sts |
ConfigMap | cm |
PersistentVolume | pv |
PersistentVolumeClaim | pvc |
HorizontalPodAutoscaler | hpa |
ComponentStatus | cs |
創(chuàng)建資源
# 創(chuàng)建一個deployment
cat >> nginx-deploy-test.yaml < EOF
apiVersion: apps/v1 #版本信息
kind: Deployment #資源信息
metadata: #元數(shù)據(jù)
name: nginx-deploy #資源名稱
namespace: default #屬于哪個命名空間下
spec:
replicas: 2 #一共有兩個副本資源
selector:
matchLabels:
app: nginx
template: #pod創(chuàng)建模板
metadata:
labels:
app: nginx
spec:
containers: #容器名稱下邊的容器可以有多個
- image: nginx #鏡像名稱
imagePullPolicy: IfNotPresent #鏡像拉取策略
name: nginx-test #容器名稱
restartPolicy: Always #重啟策略
EOF
部署上邊的yaml資源信息
kubectl apply -f nginx-deploy-test.yaml
也可以這樣使用命令行方式,直接創(chuàng)建
#創(chuàng)建pod
kubectl create deploy nginx --image=nginx
查看資源信息
1.1 查看k8s版本信息
kubeadm version
kubelet --version
kubectl version
1.2 查看pod信息
kubectl get po -o wide
1.3 查看deployment信息
kubectl get deploy
1.4 查看rs信息
kubectl get rs -o wide
1.5 外部端口暴露 查看 service信息
#暴露service端口
kubectl expose deploy nginx-deploy --type=NodePort --port=80 --target-port=8000 --name=nginx-deploy
#查看service
kubectl get svc
1.6 查看 namespace 命名空間信息
kubectl get ns
1.7 查看資源yaml信息
舉例:kubectl get 資源名稱 -o yaml -n 命名空間
如果 命名空間不填 默認(rèn)為 default
kubectl get deploy nginx-deploy -o yaml -n default
1.8 進(jìn)入k8s容器
#進(jìn)入k8s運(yùn)行的容器
kubectl exec demo-deploy-64575b5d97-txb4w -it -- /bin/bash
#退出容器
exit
1.9 查看k8s集群健康狀況
kubectl get cs
端口映射
##create 方式基于端口做映射,expose 方式基于服務(wù)做映射
##創(chuàng)建無頭服務(wù)
kubectl create svc clusterip nacos-headless --clusterip=None --tcp=8848:8848
##創(chuàng)建NodePort服務(wù)
kubectl create svc nodeport nacos-nodeport --tcp=8848:8848 --node-port=30848
##端口暴露NodePort
kubectl expose deploy nginx-deploy --type=NodePort --port=80 --target-port=8000
##創(chuàng)建ingress
##kubectl create ingress 名稱 --rule=訪問路徑 / 匹配方式=svc的名稱:端口(集群內(nèi)部端口)
kubectl create ingress nginx-ing --rule=www.digua.com/*=nginx-deploy:80
ingress代理
##創(chuàng)建ing
kubectl create ing nginx-ing --rule="test.digua.com/*=nginx-deploy:80"
修改本地win的hosts文件,增加域名映射
192.168.33.160 test.digua.com
查看日志 查看報(bào)錯
查看日志
kubectl logs pod名稱 -n 命名空間
查看資源信息
kubectl describe deploy deploy名稱 -n 命名空間
標(biāo)簽查看,標(biāo)簽制作
標(biāo)簽查看
kubectl get 資源類型 --show-labels
kubectl get no --show-labels
標(biāo)簽制作
kubectl label 資源類型 資源名稱 標(biāo)簽key=標(biāo)簽value
kubectl label no slave cpu=8cup32g
修改資源信息
舉例: kubectl edit 資源類型 資源名稱 -n 命名空間
如果 命名空間不填 默認(rèn)為 default
kubectl edit pod nginx-deploy-86597ffd87-pz5bn -n default
kubectl edit deploy nginx-deploy
kubectl edit rs nginx-deploy-86597ffd87
修改上述文章中的 nginx-deploy-test.yaml 信息后
#運(yùn)行apply 也是更新操作
kubectl apply -f nginx-deploy-test.yaml
刪除資源
舉例: kubectl delete 資源類型 資源名稱 -n 命名空間
如果 命名空間不填 默認(rèn)為 default
1.1 刪除單個pod,如果pod是由deploy等創(chuàng)建的是無法完全刪除,因?yàn)閜od停止后,scheduler會重新掃描后再創(chuàng)建
kubectl delete po nginx-deploy-86597ffd87-djkws
#刪除默認(rèn)命名空間下所有的pod,下邊的刪除也是同樣的,只是改一下資源類型
kubectl delete po --all
1.2 刪除rs,刪除rs后 對應(yīng)下邊的pod也會刪除,如果rs是通過deploy創(chuàng)建,會自動重新創(chuàng)建并順便創(chuàng)建下邊的pod
kubectl delete rs nginx-deploy-86597ffd87
1.3 刪除deployment,刪除deploy后下變得rs和pod都會被刪除
kubectl delete deploy nginx-deploy
1.4 刪除命名空間,刪除命名空間后下邊所有的pod、deploy、svc、rs都會刪除
kubectl delete ns default
1.5 強(qiáng)制刪除pod
kubectl delete po nginx-deploy-86597ffd87-djkws --force --grace-period=0
查看資源使用(cpu、內(nèi)存使用)
##kubectl top (no/po)
kubectl top no
滾動發(fā)布與回滾
滾動發(fā)布 滾動發(fā)布會保留deploy,會重新制作一個rs取代之前的rs
##kubectl set image 資源類型/資源名 容器名稱=鏡像
kubectl set image deploy/test-deploy test=192.168.34.8:85/public/test:2
版本回滾
##查看歷史版本信息 kubectl rollout history 資源類型/資源名
kubectl rollout history deploy/test-deploy
##根據(jù)歷史版本信息,指定版本進(jìn)行回滾 kubectl rollout undo 資源類型/資源名 --to-revision=版本
kubectl rollout undo deploy/test-deploy --to-revision=4
請注意,正常發(fā)版時候查看歷史版本其中的CHANGE-CAUSE是none,這個主要是由資源里邊的標(biāo)簽 kubernetes.io: “版本信息” 決定的
scale (pod擴(kuò)容)、autoscale(自動擴(kuò)容)
kubectl scale --replicas=資源數(shù)量 資源類型/資源名稱
kubectl scale --replicas=3 deploy/nginx-deploy
擴(kuò)容之前
擴(kuò)容之后
##kubectl autoscale 資源類型 資源名稱 --min=最小pod數(shù)量 --max=最大pod數(shù)量 --cpu-percent=CPU達(dá)到40%時候
kubectl autoscale deploy nginx-deploy --min=1 --max=3 --cpu-percent=40
##查看自動擴(kuò)容信息
kubectl get hpa
secret (k8s 拉取harbor鏡像配置)
kubectl create secret docker-registry 名稱 --docker-server=harbor的ip+端口 --docker-username=用戶名 --docker-password=密碼 --docker-email=郵箱(非必填)
kubectl create secret docker-registry 34.8harborregistry --docker-server=192.168.34.8:85 --docker-username=admin --docker-password=Harbor@2022 --docker-email=123@qq.com
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deploy
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: 192.168.34.8:85/hhd/demo:latest
imagePullPolicy: Always
name: demo
restartPolicy: Always
imagePullSecrets: #拉取位置
- name: 34.8harborregistry
configMap (資源管理)
#創(chuàng)建腳本 entrypoint.sh
#!/bin/bash
exec java ${java_opts} -jar demo.jar "$@"
#創(chuàng)建 Dockerfile
FROM java:9
ENV java_opts=""
WORKDIR /home
COPY entrypoint.sh entrypoint.sh
COPY demo.jar demo.jar
RUN chmod 755 entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
docker build -f Dockerfile -t test:1 .
docker login -u admin -p Admin123 192.168.34.8:85
docker tag test:1 192.168.34.8:85/project/test:1
docker push 192.168.34.8:85/project/test:1
cat >> /home/k8s/javaopt < EOF
-Xmx200m -Xmn200m -Xms200m -XX:+UseG1GC
EOF
kubectl create cm javaopt --from-file=javaenv=/home/k8s/javaenv
創(chuàng)建資源
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deploy
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- image: 192.168.34.8:85/project/test:1
imagePullPolicy: Always
name: test
env:
- name: java_opts
valueFrom:
configMapKeyRef:
name: javaopt
key: javaenv
restartPolicy: Always
imagePullSecrets:
- name: 34.8harborregistry
查看pod情況
PV PVC掛載
192.168.34.7主節(jié)點(diǎn)
192.168.34.8從節(jié)點(diǎn)
配置nfs(所有節(jié)點(diǎn)都需要配置)
##安裝nfs
yum install nfs-utils -y
##啟動nfs
systemctl restart nfs && systemctl enable nfs
在文件掛載節(jié)點(diǎn)增加配置,這里我是在主節(jié)點(diǎn)進(jìn)行的
##創(chuàng)建目錄
mkdir -p /home/nfs
chmod 777 /home/nfs
##修改配置
cat >> /etc/exports < EOF
/home/nfs *(rw,no_root_squash,no_all_squash,sync)
/home/nfs 192.168.34.0/24(rw,no_root_squash,no_all_squash,sync)
EOF
##執(zhí)行命令生效配置
exportfs -rv
檢驗(yàn)nfs掛載,在別的節(jié)點(diǎn)測試掛載
##測試ip掛載是否正常
showmount -e 192.168.34.8
mkdir /home/test
chmod 777 /home/test
mount -t nfs 192.168.34.7:/home/nfs /home/test
##查看掛載
mount |grep 192.168.34.7
驗(yàn)證nfs掛載
##從節(jié)點(diǎn)輸出到aa.txt文件
date >> /home/test/aa.txt
##主節(jié)點(diǎn)查看文件
cat /home/nfs/aa.txt
配置PV
vim test-pv.yml
apiVersion: v1
items:
- apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/bound-by-controller: "yes"
finalizers:
- kubernetes.io/pv-protection
name: test-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: test-pvc
namespace: default
nfs:
path: /home/nfs
server: 192.168.34.7
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
status:
phase: Bound
kind: List
metadata:
resourceVersion: ""
selfLink: ""
kubectl create-f test-pv.yml
配置PVC
vim test-pvc.yml
apiVersion: v1
items:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
finalizers:
- kubernetes.io/pvc-protection
name: test-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
storageClassName: ""
volumeMode: Filesystem
volumeName: test-pv
status:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
phase: Bound
kind: List
metadata:
resourceVersion: ""
selfLink: ""
kubectl create-f test-pvc.yml
查看配置的pv和pvc
kubectl get pv
kubectl get pvc
污點(diǎn)管理
污點(diǎn)類型 | 內(nèi)容 |
---|---|
NoSchedule | 在創(chuàng)建新的pod時候不會調(diào)度到該節(jié)點(diǎn) |
PreferNoSchedule | 將盡量避免調(diào)度到該節(jié)點(diǎn) |
NoExecute | 不會在該節(jié)點(diǎn)創(chuàng)建pod,如果有pod就會剔除 |
增加污點(diǎn)文章來源:http://www.zghlxwxcb.cn/news/detail-400734.html
##kubectl taint no 節(jié)點(diǎn) key:污點(diǎn)類型
kubectl taint no master key:NoSchedule
剔除污點(diǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-400734.html
kubectl taint no master key:NoSchedule-
deploy yaml文件解析
apiVersion: extensions/v1beta1 #版本
kind: Deployment #資源類型
metadata:
labels:
workload.user.cattle.io/workloadselector: deployment-cloud-prd-server #標(biāo)簽,k8s對于資源控制主要是根據(jù)labels和selector進(jìn)行的
name: server #資源名稱
namespace: cloud-prd #所屬命名空間
spec:
progressDeadlineSeconds: 600
replicas: 1 #一個pod
revisionHistoryLimit: 10
selector:
matchLabels:
workload.user.cattle.io/workloadselector: deployment-cloud-prd-server
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate #發(fā)布策略
template: #創(chuàng)建模板
metadata:
labels:
workload.user.cattle.io/workloadselector: deployment-cloud-prd-server
spec:
affinity:
nodeAffinity:
#節(jié)點(diǎn)親和度 nodeAffinity
#容器親和度 podAntiAffinity
requiredDuringSchedulingIgnoredDuringExecution:
#硬策略(必須調(diào)度符合的規(guī)則上邊) requiredDuringSchedulingIgnoredDuringExecution
#軟策略(最好可以調(diào)度符合的規(guī)則上邊) preferredDuringSchedulingRequiredDuringExecution
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- 172.26.0.46
containers:
- env:
- name: DB_HOST #對應(yīng)需要的環(huán)境變量
valueFrom: #configmap配置
configMapKeyRef:
key: DB_PORT
name: mysql-env-cm
optional: false
- name: JAVA_OPTS
value: -Xmx3550M -Xms3550M -Xmn2G -Xss256k
image: 192.1.1.1/project/server:stable #鏡像
imagePullPolicy: Always #鏡像拉取策略
name: server #容器名稱
ports:
- containerPort: 8513 #暴露端口
name: 8513tcp02
protocol: TCP
resources:
limits:
memory: 4Gi
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
volumeMounts:
- mountPath: /log #容器內(nèi)部掛載位置
name: vol1
dnsPolicy: ClusterFirst
restartPolicy: Always #重啟策略
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: vol1
persistentVolumeClaim: #掛載的pvc
claimName: log-pvc
到了這里,關(guān)于k8s 常用命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!