Linux/Kubernetes运维工程师工作清单【持续更新】

目录

一、Mysql数据库备份

二、k8s 设置弹性伸缩(HPA)

三、Redis数据库备份与恢复

四、k8s 容器副本扩容

五、k8s升级与扩容

六、Nginx篇

1)负载均衡

2)动静分离




一、Mysql数据库备份

备份命令(--no-data 该命令只备份表结构)

 mysqldump -uroot -h127.0.0.1 -p test --no-data > /root/back.sql

还原命令

mysql> source /root/back.sql;

定期备份

二、k8s 设置弹性伸缩(HPA)

弹性伸缩是基于Metrics-server组件获取Pod的资源使用情况,Metric server从每个节点上Kubelet公开的摘要API收集指标,从而与阈值进行比较,进行扩缩容。

1、首先安装Metrics-server组件

下载部署清单文件:

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

vim metricserver.yaml 修改里面的args参数,添加- --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP

资源清单如下

apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp     
...skipping...
kind: Deployment
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
      #修改镜像拉取地址为aliyun路径
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
      #镜像拉取策略改为IfNotPresent
        imagePullPolicy: IfNotPresent
      #增加command字段与参数:这个是k8s在1.7的新特性,如果是1.16版本的可以不用添加,1.17以后要添加。这个参数的作用是Aggregation允许在      不修改Kubernetes核心代
码的同时扩展Kubernetes API
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp

根据metricserver.yaml创建metric-server

kubectl create -f metricserver.yam

安装好后,可以使用top命令查看各个节点状态。

2、创建弹性伸缩资源

以nginx为例

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  labels:
    app: nginx-test
  name: nginx-test
  namespace: nginx
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx-test
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-test
    spec:
      nodeName: node1
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        resources:
          requests:
            cpu: "200m"
          limits:
            cpu: "400m"
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}

最重要,一定要创建resources中的资源限额。

使用命令创建HPA

kubectl autoscale deployment nginx-test -n nginx --cpu-percent=20 --min=1 --max=10

测试成功 !

三、Redis数据库备份与恢复

使用Shell脚本备份数据

command.txt内容如下:

bgsave

redis_backup.sh内容如下:

#! /bin/sh
echo "redis数据开始备份!"
date=$(date +%Y-%m-%d-%-H:%M:%S)
echo "时间$date"
cat /Users/vimrus/Desktop/command.txt | redis-cli -h 127.0.0.1 -p 6379 --pipe
cp /usr/local/var/db/redis/dump.rdb /tmp/$date.rdb
echo "redis数据备份目录-/tmp/"$date.rdb;
echo "redis数据备份成功!"

数据恢复,可以将rdb文件拷贝至rdb工作目录下,覆盖原有rdb文件,redis重启时,可重新载入。

四、k8s 容器副本扩容

#kubectl scale --replicas=[副本数量] deployment/[deployment名称] -n [namespace]

kubectl scale --replicas=3 deployment/nginx-test -n nginx

实际效果展示

五、k8s升级与扩容

1.升级

yum install kubeadm-1.19.16-0 kubelet-1.19.16-0 kubectl-1.19.16-0 --disableexcludes=kubernetes

kubeadm upgrade apply 1.19.16

systemctl daemon-reload

systemctl restart kubelet

节点升级同样操作

2.扩容

安装docker,kubeadm,kubelet

master上执行

kubeadm token create --print-join-command

节点上执行

kubeadm join 192.168.52.129:6443 --token 8r7f65.674rv6mwv9gszmu1     --discovery-token-ca-cert-hash sha256:456d9003a9f05f313ab3ab6c3e74fe7ec9a4a4492a33ee736fcfd674fc6df6e1

六、Nginx篇

1)负载均衡

在Nginx配置文件中添加upsteam,在server-location下配置proxy_pass为上游服务起集群

http {

    upstream httpds{
         server 192.168.52.131 weight=8;
         server 192.168.52.132 weight=8;
         server 192.168.52.131 weight=9;
               ... ... 
   }

    server {
        listen       80;
        server_name www.huangyajie.*;
        location / {
               ssi on;
               proxy_pass http://httpds; #配置反向代理的上游
                    }
            }
 }

2)动静分离

环境:

Nginx主机

Tomcat主机

第一步:配置Nginx

vim /usr/local/nginx/conf/nginx.conf

location / {
               proxy_pass http://192.168.52.131:8080;
        }

location /css {
            root  html;
            index  index.html index.htm;
        }

配置反向代理,以及静态文件目录

第二步:将Tomcat主机上CSS部分移到Nginx主机html目录下

第三步:重启Nginx

systemctl reload nginx

完成~

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值