拉取镜像部署服务

拉镜像:
docker pull alpha-harbor.51iwifi.com/video-cloud/dataservice-node-provider:1.0.2.55
编排文件:
启动容器:
helm install --namespace beta -n front-gateway ./front-gateway
其中-n为指定helm中的名字,可以用helm list查询,如果需要部署到特定namespace只需加上 --namespace,可以选择没有,./front-gateway指的是该服务的编排文件
k8s教程

升级镜像服务

helm --namespace np(命名空间) upgrade wechat-auth-service(release名称) ./(chart路径) --description "change port "

获取镜像、服务名

kubectl describe pod |grep Image: | grep cloud-switch |awk '{print$2}'
kubectl describe pod |grep Image: | grep cloud-switch |awk '{print$2}'| awk -F '/' '{print $3}'|awk -F ':' '{print $1}'

回滚服务

先用helm hist 查看历史版本:helm hist 镜像名(用helm list可以找到)

[superdog] # helm hist smarthome-admin
REVISION	UPDATED                 	STATUS    	CHART                 	APP VERSION	DESCRIPTION     
1       	Thu Apr 22 14:37:47 2021	SUPERSEDED	smarthome-admin-1.0.56	1.0.0.23   	Install complete
2       	Thu Apr 22 14:43:44 2021	SUPERSEDED	smarthome-admin-1.0.56	1.0.0.23   	Upgrade complete
3       	Tue May 11 16:48:55 2021	DEPLOYED  	smarthome-admin-1.0.57	1.0.0.23   	Upgrade complete

以上可以看到该镜像部署记录,版本回滚到第二个版本

[superdog] # helm rollback --debug smarthome-admin 2
[debug] Created tunnel using local port: '35999'

[debug] SERVER: "127.0.0.1:35999"

Rollback was a success.

删除pod后自动又新起一个

这里原因在于还有个deployment的没有删除

#如有需要加上 -n命名空间
kubectl delete pod <podname>
kubectl get deployment <name>
kubectl delete deployment <name>
kubectl get service <name>
kubectl delete service <name>

删除一直处于terminating的pod

kubectl delete pods --grace-period=0 --force

创建PVC

这里创建PVC后会自动申领一个PV,底层的storageClass provisioner承担了申领工作
创建一个固定的文件目录作为存储pvc配置文件,新建yaml文件,内容如下:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: analysis-push
  namespace: beta
  annotations:
    volume.beta.kubernetes.io/storage-class: "default"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

这里修改的就是name,namespace,创建完后启动PVC:kubectl apply -f analysis-push.yaml
至此启动完毕后,在编排文件中调用该PVC,一般是在deployment.yaml文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "fullname" . }}
  labels:
    app: {{ template "name" . }}
    chart: {{ template "chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ template "name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ template "name" . }}
        release: {{ .Release.Name }}
    spec:
      containers:
        - name: jar
          image: "{{ .Values.image.war.repository }}:{{ .Values.image.war.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: TZ
              value: Asia/Shanghai
          volumeMounts:
          - mountPath: /service/media/storage
            name: app-volume
      volumes:
      - name: app-volume
        persistentVolumeClaim:
          claimName: smart-home-manage

claimName为刚启动的PVC名称,mountPath为pod内部挂载出的目录
手动创建PV,PVC实现绑定:官方指导

批量删除服务

helm list |grep opf-datas|awk '{printf ""$1" "}' | xargs helm delete --purge

删除evicted状态pod

–all-namespace指所有空间,可以用-n 指定特定空间删除

kubectl get pods -n beta | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n beta

复制容器文件到外面

复制整个目录

kubectl cp -n beta smart-home-776f7d9866-r8tmv:/code/log/ ./  

复制单个文件:注意后面的目标目录必须带上文件名

kubectl cp -n beta smart-home-776f7d9866-r8tmv:/code/log/logs.log ./logs.log

修复集群节点状态被驱逐

  1. 清理磁盘,降低到80%以下
  2. 解除beta-ceshi-funeng-3状态,kubectl uncordon beta-ceshi-funeng-3
  3. 重启docker systemctl restart docker
  4. 重启Evicted pod,4.1 kubectl get pod -A |grep Evicted获取到被驱逐的pod,4.2逐个delete

重启某个节点里的所有服务

kubectl get pods -n beta -o wide| grep funengg-1 | awk ‘{print $1}’ | xargs kubectl delete pod -n beta

某节点失联后将其服务驱逐到其他节点

kubectl taint node k8s-sx02-node4 key=value:NoSchedule  
kubectl taint node k8s-sx02-node4 key=value:NoExecute 
kubectl get pods --all-namespaces -o wide | grep k8s-sx02-node4 | awk '{print $2}'  | xargs kubectl -n beta delete pods --grace-period=0 --force

集群异常定位

定位方法
磁盘清理镜像:docker image prune --all
docker system prune

pod异常退出

在服务启动出错时,pod往往也会自动退出无法进入查看具体的报错信息,此时就需要修改部署文件,来让pod不退出
1.将以下语句,放到deployment.yaml 文件的image下,重新部署,让服务的pods 可以启动

command: [“/bin/sh”]
args: ["-c","while true; do date; sleep 10000; done"]

2.进入容器:ksexe vc-sip-receive-provider-688c5f5c7b-b8r9v bash
3.启动服务:java -Xms512m -Xmx512m -jar -Dspring.profiles.active=test -Dspring.config.location=config/application-test.properties -Dspring.cloud.consul.host=consul -Dspring.cloud.consul.port=8500 vc-sip-receive-provider-1.0.0.41826.198.jar
4.解压jar包:unzip xx.jar
5.重新压缩包:jar cvfM0 springcloud-zuul.jar * // 压缩当前目前所有文件到.jar jar cvfM0 spring-zuul.jar E:/springcloud-zuul/ // 指定压缩目录

给pod添加资源限制

在deployment.yaml文件中添加:注意是在containers 标签下,与image同层级

          resources:
            limits:
              cpu: 1000m
              memory: 1000Mi
            requests:
              cpu: 100m
              memory: 600Mi

在这里插入图片描述

开启pod多个对外端口映射

在chart文件里的service.yaml添加如下内容:

apiVersion: v1
kind: Service
metadata:
  name: {{ template "fullname" . }}
  labels:
    app: {{ template "name" . }}
    chart: {{ template "chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30912
      protocol: TCP
      name: gateway-service
    - port: 81
      targetPort: 81
      nodePort: 30922
      protocol: TCP
      name: gateway-port
  selector:
    app: {{ template "name" . }}
    release: {{ .Release.Name }}

获取加入集群命令

在master节点输入
kubeadm token create --print-join-command

将pod部署在指定节点

先为所要部署的节点添加label:注意label不能纯是数字或者true这类关键词

kubectl label node ctunos-moban-7 600Gdisk=node2487

在deployment文件里写入如下,注意是与container同级

      nodeSelector:
        600Gdisk: node2486

在这里插入图片描述
如果要删除label输入kubectl label node ctunos-moban-7 600Gdisk-

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐