k8s 常用命令

资源类型 资源简称
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

创建资源

# 创建一个deployment 
cat >> nginx-deploy-test.yaml < EOF
apiVersion: apps/v1 #版本信息
kind: Deployment  #资源信息
metadata:   #元数据
  name: nginx-deploy  #资源名称
  namespace: default  #属于哪个命名空间下
spec: 
  replicas: 2   #一共有两个副本资源
  selector:
    matchLabels: 
      app: nginx
  template:      #pod创建模板
    metadata:
        labels:
          app: nginx 
    spec:
      containers:   #容器名称下边的容器可以有多个
      - image: nginx  #镜像名称
        imagePullPolicy: IfNotPresent  #镜像拉取策略
        name: nginx-test  #容器名称
      restartPolicy: Always  #重启策略
EOF

部署上边的yaml资源信息

kubectl apply -f nginx-deploy-test.yaml

也可以这样使用命令行方式,直接创建

#创建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
#查看service
kubectl get svc

在这里插入图片描述在这里插入图片描述

1.6 查看 namespace 命名空间信息

kubectl get ns

k8s 常用命令_第1张图片
1.7 查看资源yaml信息
举例:kubectl get 资源名称 -o yaml -n 命名空间
如果 命名空间不填 默认为 default

kubectl get deploy nginx-deploy -o yaml -n default

k8s 常用命令_第2张图片
1.8 进入k8s容器

#进入k8s运行的容器
kubectl exec demo-deploy-64575b5d97-txb4w -it -- /bin/bash
#退出容器
exit

1.9 查看k8s集群健康状况

kubectl get cs

在这里插入图片描述

端口映射

##create 方式基于端口做映射,expose 方式基于服务做映射
##创建无头服务
kubectl create svc clusterip nacos-headless --clusterip=None --tcp=8848:8848
##创建NodePort服务
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
##创建ingress
##kubectl create ingress 名称 --rule=访问路径 / 匹配方式=svc的名称:端口(集群内部端口)
kubectl create ingress nginx-ing --rule=www.digua.com/*=nginx-deploy:80

ingress代理

##创建ing
kubectl create ing nginx-ing --rule="test.digua.com/*=nginx-deploy:80"

修改本地win的hosts文件,增加域名映射

192.168.33.160 test.digua.com

k8s 常用命令_第3张图片

查看日志 查看报错

查看日志

kubectl logs pod名称 -n 命名空间

查看资源信息

kubectl describe deploy deploy名称 -n 命名空间

标签查看,标签制作

标签查看

kubectl get 资源类型 --show-labels
kubectl get no --show-labels

标签制作

kubectl label 资源类型 资源名称 标签key=标签value
kubectl label no slave cpu=8cup32g

修改资源信息

举例: kubectl edit 资源类型 资源名称 -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 信息后

#运行apply 也是更新操作
kubectl apply -f nginx-deploy-test.yaml

删除资源

举例: kubectl delete 资源类型 资源名称 -n 命名空间
如果 命名空间不填 默认为 default
1.1 删除单个pod,如果pod是由deploy等创建的是无法完全删除,因为pod停止后,scheduler会重新扫描后再创建

kubectl delete po nginx-deploy-86597ffd87-djkws 
#删除默认命名空间下所有的pod,下边的删除也是同样的,只是改一下资源类型
kubectl delete po --all

1.2 删除rs,删除rs后 对应下边的pod也会删除,如果rs是通过deploy创建,会自动重新创建并顺便创建下边的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 强制删除pod

kubectl delete po nginx-deploy-86597ffd87-djkws  --force --grace-period=0

查看资源使用(cpu、内存使用)

##kubectl top (no/po)
kubectl top no

滚动发布与回滚

滚动发布 滚动发布会保留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
##根据历史版本信息,指定版本进行回滚    kubectl rollout undo 资源类型/资源名 --to-revision=版本
kubectl rollout undo deploy/test-deploy --to-revision=4

请注意,正常发版时候查看历史版本其中的CHANGE-CAUSE是none,这个主要是由资源里边的标签 kubernetes.io: “版本信息” 决定的
k8s 常用命令_第4张图片
k8s 常用命令_第5张图片

scale (pod扩容)、autoscale(自动扩容)

kubectl scale --replicas=资源数量 资源类型/资源名称

kubectl scale --replicas=3 deploy/nginx-deploy

扩容之前
在这里插入图片描述
扩容之后
在这里插入图片描述

##kubectl autoscale 资源类型 资源名称 --min=最小pod数量 --max=最大pod数量 --cpu-percent=CPU达到40%时候
kubectl autoscale deploy nginx-deploy --min=1 --max=3 --cpu-percent=40
##查看自动扩容信息
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 (资源管理)

#创建脚本  entrypoint.sh
#!/bin/bash
exec java ${java_opts} -jar demo.jar "$@"
#创建 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

创建资源

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主节点
192.168.34.8从节点

配置nfs(所有节点都需要配置)

##安装nfs
yum install nfs-utils -y
##启动nfs
systemctl restart nfs && systemctl enable nfs

在文件挂载节点增加配置,这里我是在主节点进行的

##创建目录
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
##执行命令生效配置
exportfs -rv

检验nfs挂载,在别的节点测试挂载

##测试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

验证nfs挂载

##从节点输出到aa.txt文件
date >> /home/test/aa.txt
##主节点查看文件
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

污点管理

污点类型 内容
NoSchedule 在创建新的pod时候不会调度到该节点
PreferNoSchedule 将尽量避免调度到该节点
NoExecute 不会在该节点创建pod,如果有pod就会剔除

增加污点

##kubectl taint no 节点 key:污点类型
kubectl taint no master key:NoSchedule

剔除污点

kubectl taint no master key:NoSchedule-

deploy yaml文件解析

apiVersion: extensions/v1beta1 #版本
kind: Deployment  #资源类型
metadata:
  labels:
    workload.user.cattle.io/workloadselector: deployment-cloud-prd-server  #标签,k8s对于资源控制主要是根据labels和selector进行的
  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 #发布策略
  template:    #创建模板
    metadata:
      labels:
        workload.user.cattle.io/workloadselector: deployment-cloud-prd-server
    spec:
      affinity:
        nodeAffinity:  
        #节点亲和度  nodeAffinity
        #容器亲和度  podAntiAffinity
          requiredDuringSchedulingIgnoredDuringExecution:  
          #硬策略(必须调度符合的规则上边) requiredDuringSchedulingIgnoredDuringExecution
          #软策略(最好可以调度符合的规则上边) preferredDuringSchedulingRequiredDuringExecution
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - 172.26.0.46
      containers:
      - env:
        - name: DB_HOST  #对应需要的环境变量
          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  #容器内部挂载位置
          name: vol1
      dnsPolicy: ClusterFirst
      restartPolicy: Always  #重启策略
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: vol1
        persistentVolumeClaim: #挂载的pvc
          claimName: log-pvc

你可能感兴趣的:(Kubernetes,kubernetes,docker,nginx)