k8s学习笔记

K8S

Helm : Kubernetes包管理器,类似dockerhub

K8S节点图

在这里插入图片描述

应用关系

在这里插入图片描述

集群部署

在这里插入图片描述

kubectl语法
  • kubectl [command] [type] [name] [flags]
  • command:指定对资源的操作如create,delete
  • type:资源类型,如deplyment pod
  • name:资源名称,大小写敏感
  • flags:额外的可选参数
命令分类
命令分类命令作用
基本命令create创建一个资源
edit编辑一个资源
get获取一个资源
patch更新一个资源
delete删除一个资源
explain展示一个资源
运行和调试run在集群中运行一个指定的镜像
expose暴露资源为service
describe显示资源内部信息
logs输出容器在pod中的日志
attach进入运行的容器
exec执行容器中的一个命令
cp在pod内外复制文件
rollout管理资源等等发布
scale扩缩容pod数量
autoscale自动调整pod数量
高级命令apply通过文件对资源进行配置
label更新资源上的标签
其他命令cluster-info显示集群信息
version显示当前server和client的版本
kubectl中创建资源,直接用下面的命令,xxx.yml就是资源的配置文件
kubectl apply -f xxx.yml 

# 查看kubectl版本
kubectl version
kubectl get all

名称空间(Namespace)

  • 名称空间用来隔离资源,不隔离网络
命令行形式创建和删除名称空间
kubectl create ns aaa
kubectl delete ns aaa
配置文件形式创建和删除名称空间
apiVersion: v1 # 版本号
kind: Namespace #资源类型
metadata: # 元数据
  name: aaa # 名称空间名字
kubectl apply -f xxx.yml 

kubectl create/get -f xxx.yml
kubectl delete -f xxx.yml 

Pod

  • 运行中的一组容器,是k8s中的最小单位
  • 每一个pod,k8s都会分配一个ip,私有ip
  • 同一个pod内共享网络空间,共享存储,所以同一个pod的容器,想要访问pod内其他容器直接localhost
  • 每一个pod都会有一个根容器,可以根据它评估pod的健康状态。
# 创建一个pod,名字为(mypod)
kubectl run mypod --image=nginx

# 每隔1秒运行,查看pod
watch -n 1 kubectl get pod
# 查看所有pod
kubectl get pod -A
# 查看所有pod,状态变化过程
kubectl get pod -w
# 查看pod,默认查看的是default名称空间下的pod
kubectl get pod
# 查看pod详细的信息,出力的内容里有(Events:事件)
kubectl describe pod mypod
# 删除pod,删除的是默认的名称空间default里面的pod
kubectl delete pod mypod
# 删除aaa名称空间里面的 pod
kubectl delete pod mypod -n aaa
# 查看pod更完善的信息
kubectl get pod -owide
# 进入pod里面
kubectl exec -it mypod -n aaa -- /bin/bash
# 如果pod里面有多个容器,进入具体的容器-c nginx
kubectl exec -it mypod -n aaa -c nginx -- /bin/bash

# 查看pod的标签
kubectl get pod --show labels

# 查看每种资源的可配置项
# kubectl explain 资源
# kubectl explain 资源.属性
kubectl explain pod
kubectl explain pod.medtadata

# 查看版本,由k8s内部定义
kubectl api-versions
# 查看资源,由k8s内部定义
kubectl api-resources

# 每隔1秒运行,查看pod
watch -n 1 kubectl get pod
配置文件创建一个pod,里面包含一个容器
apiVersion: v1 # 版本号
kind: Pod #资源类型
metadata: # 元数据
  labels: #标签
    run: mypod
  name: mypod # Pod名字
spec: #对各种资源配置的详细描述
  containers:
  - image: nginx # 镜像
    # Always 总是用远程仓库的
    # IfNotPresent 如果本地有,就使用本地的,本地没有就用远程仓库的
    # Never 总是使用本地的
    # 如果镜像tag是版本号,默认是IfNotPresent,如果镜像tag是latest默认是Always
    imagePullPolicy: Always # 镜像拉取策略
    name: nginx # 镜像别名
    command: # <[]string> #容器启动的命令
    - /bin/sh
    args: # <[]string> #容器启动命令需要的参数
    - aa
    env: # <[]object> #容器环境变量配置
    - name: "name" 
      value: "value"
    ports: # <[]object> #容器需要暴露的端口号列表
    - name: "ngnix-port" #端口名称
      containerPort: 80 #容器要监听的端口
      protocol: TCP #端口协议 TCP,UDP,SCTP
    resources: # <object> #资源限制和资源请求的设置
      limits: # 限制资源(上限) 当资源超过了就会重启
        cpu: "2m" #可以为整数或小数
        memory: "20Mi" # Gi,Mi,G,M
      requests:# 请求资源(下限) 如果资源不够则无法启动
        cpu: "1m"
        memory: "5Mi"
    lifecycle: # 初始化容器,执行顺序从上到下,先mysql,再redis。
      postStart: #容器启动后钩子
        #tcpSocket: 在当前容器访问指定的socket
        #httpGet: 在当前容器发起http请求
        exec: #在当前容器内执行命令
          command:
          - ll
      preStop: #容器终止前钩子
        exec: #在当前容器内执行命令
          command:
          - pwd
    livenessProbe: # 存活性探针,检查当前实例是否是正常运行状态,如果不是,k8s会重启
      exec: #在当前容器内执行命令
        command:
        - ll
      tcpSocket: #在当前容器访问指定的socket
        port: 8080 #尝试访问8080端口
      httpGet: #在当前容器发起http请求
        scheme: HTTP #请求的协议http,https
        prot: 80 #端口号
        path: /hello #URI地址
      initialDelaySeconds: #容器启动后等待多少秒执行第一次探测
      timeoutSeconds: #探测超时时间
      periodSeconds: #执行探测的频率
      failureThreshold: #连续探测失败多少次才认定失败
      successThreshold: #连续探测成功多少次认定成功
    readnessProbe: # 就绪性探针,检查当前实例是否可以接收请求,如果不是,k8s不会将请求转进来
  - image: tomcat # 镜像
    name: tomcat # 镜像别名
  initContainers: # 初始化容器,执行顺序从上到下,先mysql,再redis。
  - image: mysql # 镜像
    name: mysql
  - image: redis # 镜像
    name: redis
  restartPolicy: Never #容器重启策略,Always容器失效时自动重启,默认值。OnFailure容器终止运行且退出码不为0时重启。Never不重启容器
  nodeName: node1 # 定向调度,根据节点名字
  nodeSelector:
    nodeabc: deve #定向调度,根据节点的标签,将pod调度到具有nodeabc=deve标签的节点上
  affinity: # 亲和性设置
    #nodeAffinity: node亲和性
    #podAffinity: pod亲和性
    #podAntiAffinity: pod反亲和性
  tolerations: # 容忍调度
  - key: "youname" #容忍污点的key
    operator: "Equal" #操作符 =
    value: "abcd" #容忍污点的value
    effect: "PreferNoSchedule" #容忍污点的effect,容忍规则
    
pod的生命周期
  • pod创建
  • 运行初始化容器 init container
  • 运行主容器 main container
  • 容器启动后钩子post start ,容器终止前钩子pre stop
  • 容器的存活性探针 liveness probe 容器的就绪性探针 readliness probe
  • pod终止

在这里插入图片描述

pod调度
  • 自动调度
  • 定向调度[pod角度]:NodeName(根据节点名字), NodeSelector(根据节点的标签)
  • 亲和性调度[pod角度]:NodeAffinity(node亲和性),PodAffinity(pod亲和性),PodAntiAffinity(pod反亲和性)
  • 污点调度[node角度]: Taints(污点),node设置污点之后就和pod产生一种相斥关系。
    • 污点格式key=value:effect (key=value)是污点的标签,(effect)是描述的污点作用。master节点默认有污点。
    • PreferNoSchedule:尽量不调度过来
    • NoSchedule:新的不要调度过来,已经存在的就保持
    • NoExecute:新的不要调度过来,已经存在的也赶走
  • 容忍调度[node角度]:Toleration(容忍),即使node有污点,也可以容忍调度。
# 设置污点
#kubectl taint nodes node1 key=value:effect
kubectl taint nodes node1 youname=abcd:PreferNoSchedule
# 去除污点
#kubectl taint nodes node1 key=effect-
kubectl taint nodes node1 youname=PreferNoSchedule-
# 去除所有污点
#kubectl taint nodes node1 key-
kubectl taint nodes node1 youname-

标签(Label)

# 为pod资源打标签
kubectl label pod mpod version=1.0 -n aaa
#  更新pod资源标签
kubectl label pod mpod version=2.0 -n aaa --overwrite
# 查看标签
kubectl get pod mpod -n aaa --show-labels
# 筛选标签
kubectl get pod mpod -n aaa version=2.0 --show-labels
kubectl get pod mpod -n aaa version!=2.0 --show-labels
# 删除标签
kubectl label pod mpod -n aaa version-

# 为node资源打标签
kubectl label nodes mpod version=1.0

ReplicaSet(RS)

  • 保证一定数量的pod正常运行,会持续监听pod状态,一旦pod故障就会重启pod
kubectl get rs
# 修改rs,然后是以yml形式打开部署,之后更改配置
kubectl edit rs rs-a -n dev
apiVersion: apps/v1 # 版本号
kind: ReplicaSet #资源类型
metadata: # 元数据 包含了 Pod 的元数据,例如名称、标签、命名空间
  labels: #标签
    app: mydev
  name: mydev # 部署名字
spec: # 定义了 部署的行为和构建
  replicas: 3
  selector: 
    matchLabels:
      app: mydev
  template: # 模板
    metadata:
      labels: #标签
        app: mydev
    spec:
      containers:
      - image: nginx # 容器镜像地址
        name: mypod # 容器名称

部署(Deployment)

  • 通过控制ReplicaSet来控制pod,使pod拥有多副本,自愈,故障转移,扩缩容,滚动更新等等
  • Deployment进行滚动更新时,会新建ReplicaSet,然后在新建ReplicaSet里面新建pod,然后删除旧ReplicaSet里面pod。最终旧ReplicaSet下pod变成0,但是k8s不会删除旧的ReplicaSet,主要是用来做版本回退。
# 创建一个部署,名字为(mydev) 并启动3个pod副本【多副本】
# pod副本的名字为 mydev-xxx 其中xxx是自动生成的序列号随机的。--record会记录每次更新的过程
kubectl create deployment mydev --image=nginx --replicas=3 --record
# 删除pod,但由于该pod是部署mydev启动的pod副本,所有删除后,部署(mydev)又会重新启动一个新的pod【自愈】。
kubectl delete pod mydev-xxx

# 查看部署,默认是defalult名称空间
kubectl get deployment

# 查看部署,以yml形式输出
kubectl get deployment -o yaml

# 查看部署,以json形式输出
kubectl get deployment -o json

# 删除部署,部署的pod副本都会被删除
kubectl delete deployment mydev
apiVersion: apps/v1 # 版本号
kind: Deployment #资源类型
metadata: # 元数据 包含了 Pod 的元数据,例如名称、标签、命名空间
  labels: #标签
    app: mydev
  name: mydev # 部署名字
spec: # 定义了 部署的行为和构建
  replicas: 3 #副本数量
  revisionHistoryLimit: 3 #保留历史版本,默认10
  paused: false #暂停部署,默认false
  progressDeadlineSeconds: 600 #部署时间超过(s)
  strategy: #策略
    #type: Recreate 在创建新pod之前,会关掉所有老版本的pod
    type: RollingUpdate #滚动更新策略,先启动一个新的,然后关闭一个旧的。
    rollingUpdate: #滚动更新
      maxSurge: 30% #最大额外可以存在的副本数
      maxUnavailable: 30% #最大不可用状态的pod最大值
  selector: 
    matchLabels:
      app: mydev
  template:
    metadata:
      labels: #标签
        app: mydev
    spec:
      containers:
      - image: nginx # 容器镜像地址
        name: mypod # 容器名称
扩缩容
# 扩容量,缩容量 【deployment/mydev】是扩容或者缩容,哪个部署。默认是default名称空间
kubectl scale deployment/mydev --replicas=5 
kubectl scale deployment mydev --replicas=5 

# 修改部署,然后是以yml形式打开部署,之后更改配置
kubectl edit deployment mydev
滚动更新
  • 不停机更新应用
# 更新镜像 nginx=是原来部署中的镜像名字,nginx:1.15.1镜像的版本 --record代表记录更新
kubectl set image deployment mydev nginx=nginx:1.15.1 --record
版本回退
  • kubectl rollout 版本升级选项
    • status 显示当前升级状态
    • history 显示升级历史记录
    • pause 暂停版本升级过程
    • resume 继续已经暂停的版本升级过程
    • restart 重启版本升级过程
    • undo 回滚到上一个版本
# 显示当前升级状态
kubectl rollout status deployment mydev
# 历史记录
kubectl rollout history deployment/mydev
# 查看某个历史详情 2是历史记录中的版本号
kubectl rollout history deployment/mydev --revision=2
# 回滚到上次
kubectl rollout undo deployment/mydev
# 回滚到指定版本
kubectl rollout undo deployment/mydev --to-revision=2

工作负载

  • Deployment:如果pod宕机了,在其他node中重启了pod,那么pod之前数据就没有了。
  • StateFulSet:如果pod宕机了,在其他node中重启了pod,那么pod之前数据,还可以挂载访问。提供稳定的存储功能

在这里插入图片描述

Horizontal Pod Autoscaler(HPA)

  • 获取pod的利用率,然后动态的扩缩容
    在这里插入图片描述
kubectl get hpa -n dev
apiVersion: autlscaling/v1 # 版本号
kind: HorizontalPodAutoscaler #资源类型
metadata: # 元数据
  name: myhpa # HPA名字
spec:
  minReplicas: 1 #最小pod数
  maxReplicas: 3 #最大pod数
  targetCPUUtilizationPercentage: 3 #cpu使用率指标
  scaleTargetRef: #要控制的信息
    apiVersion: apps/v1
    kind: Deployment
    name: mydev #要控制的部署的名字

DaemonSet(DS)

  • 保证集群中,每一台(或指定)节点上都运行一个副本,一般用于日志收集
  • 每当向集群中添加一个节点时,就会向DaemonSet中添加一个pod的副本
  • 当节点从集群中移除,pod也就被垃圾回收了。
    在这里插入图片描述
apiVersion: apps/v1 # 版本号
kind: DaemonSet #资源类型
metadata: # 元数据
  name: myds # DS名字
spec: # 定义了 部署的行为和构建
  revisionHistoryLimit: 3 #保留历史版本,默认10
  strategy: #策略
    type: RollingUpdate #滚动更新策略,先启动一个新的,然后关闭一个旧的。
    rollingUpdate: #滚动更新
      maxSurge: 30% #最大额外可以存在的副本数
      maxUnavailable: 30% #最大不可用状态的pod最大值
  selector: 
    matchLabels:
      app: myds
  template:
    metadata:
      labels: #标签
        app: myds
    spec:
      containers:
      - image: nginx # 容器镜像地址
        name: mypod # 容器名称

Job

  • 负责处理批量,一次性任务。
  • 当jod创建的pod执行成功后,会记录pod的数量
  • 当成功执行的pod达到指定数量时,job将完成执行
apiVersion: batch/v1 # 版本号
kind: Job #资源类型
metadata: # 元数据
  name: myjob # Job名字
spec: # 定义了 部署的行为和构建
  completions: 1 #指定jod需要成功运行pods的次数
  parallelism: 1 #指定pod并发数量
  activeDeadLineSeconds: 30 #指定pod可运行的时间期限
  backoffLimit: 6 #指定job失败后重试的次数
  manualSelector: true #是否可以使用selector选择器选择pod,默认是false
  selector: 
    matchLabels:
      app: myjob
  template:
    metadata:
      labels: #标签
        app: myjob
    spec:
      restartPolicy: Never #重启策略只能设置为Never或OnFailure
      containers:
      - image: nginx # 容器镜像地址
        name: mypod # 容器名称

CronJob(CJ)

  • 可以在特定的时间,周期性的重复去执行job
    在这里插入图片描述
apiVersion: batch/v1beta1 # 版本号
kind: CronJob #资源类型
metadata: # 元数据
  name: mycronjob # Job名字
spec: # 定义了 部署的行为和构建
  #cron格式
  #1      *    *   *   *
  #<分钟><小时><日><月><星期>
  schedule: #cron格式的调度运行时间
  concurrencyPolicy: # 并发策略
  failedJobHisotryLimit: #为成功的任务执行保留历史记录
  successfulJobHistoryLimit: #为失败的任务执行保留历史记录
  startingDeadlineSeconds: #启动作业错误的超时时长
  jobTemplate: #job控制器模板
    metadata:
    spec: # 定义了 部署的行为和构建
      completions: 1 #指定jod需要成功运行pods的次数
      parallelism: 1 #指定pod并发数量
      activeDeadLineSeconds: 30 #指定pod可运行的时间期限
      backoffLimit: 6 #指定job失败后重试的次数
      manualSelector: true #是否可以使用selector选择器选择pod,默认是false
      selector: 
        matchLabels:
          app: myjob
      template:
        metadata:
          labels: #标签
            app: myjob
        spec:
          restartPolicy: Never #重启策略只能设置为Never或OnFailure
          containers:
          - image: nginx # 容器镜像地址
            name: mypod # 容器名称

服务(Service)

  • 将一组pod公开为网络服务
  • service只是一个概念,真正起作用的是kube-proxy
  • service下会生成Endpoints。
  • Endpoints是k8s的一种资源,存储在etcd中。作用是建立service和pod的关联,用来记录一个service对应的所有pod的访问地址

在这里插入图片描述

# 对外暴露服务 port是外部可以访问的服务端口,--target-port是pod的容器端口
# 集群内任意访问
kubectl expose deployment mydev --port=8000 --target-port=80
# ClusterIP是集群ip,即只能在集群内部访问,和上面的命令同样的作用
kubectl expose deployment mydev --port=8000 --target-port=80 --type=ClusterIP
# NodePort是,在集群内部或 集群外部都 能访问
# 此时该service的端口变为例如(8000:30948/TCP)其中前面8080是集群内部访问的端口,30948是集群外部访问的端口
# NodePort 默认范围是30000-32767之间
kubectl expose deployment mydev --port=8000 --target-port=80 --type=NodePort
#删除部署的服务
kubectl delete service mydev

# 服务的域名为(服务名.所在的名称空间.svc)
# 上记域名只能在其他pod内访问,直接在pod外机器上访问是不行的。
curl mydev.aaa.svc

kubectl describe service mydev

kubectl get service

kubectl get endpoints

#进入容器后
cat /etc/resolv.conf

在这里插入图片描述

apiVersion: v1 # 版本号
kind: Service #资源类型
metadata: # 元数据
  labels: #标签
    app: myservice
  name: myservice # service名字
spec:
  selector: 
    app: mypod # 根据pod的标签选择pod
  type: clusterIP #service类型 默认值,只能在集群内访问
  clusterIP: 10.100.11.1#集群ip,不写默认会生成一个
  #clusterIP: None #将clusterIP设置为None,即可创建headliness Service ,不会生成clusterIP只能通过域名访问
  #type: NodePort #将暴露端口给外部,集群外部也能访问,通过端口号31100
  #type: LoadBalancer #将暴露端口给外部,使用外部负载均衡器完成到服务器的负载分发
  #type: ExternalName #把集群外部的服务,引入集群内部
  #externalName: www.baidu.com
  serssionAffinity: #serssion亲和性
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
    # nodePort: 31100 #NodePort 不指定默认会在30000-32767之间分配一个

入口(Ingress)

  • service的统一网关入口
  • 不是k8s自带的资源,要下载。
  • 和nginx类似的功能

在这里插入图片描述

  • 访问order.atguigu.com就会访问service a
  • 访问user.atguigu.com就会访问service b
# 查看入口
kubectl get ingress
apiVersion: networking.k8s.io/v1 # 版本号
kind: Ingress #资源类型
metadata: # 元数据
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2 # 路径重写
    nginx.ingress.kubernetes.io/limit-rps: "1" # 流量限制
  name: my-ingress 
spec:
  ingressClassName: nginx
  #tls: 此方式是https的请求
  #- hosts:
  #  - order.atguigu.com
  #  - user.atguigu.com
  #  secretName: tls-secret #指定密钥
  rules:
 - host: "order.atguigu.com" # 匹配域名
    http:
      paths:
      - type: Prefix # 前缀模式
        path: "/" #以/开始的所有服务
        backend:
          service:
            name: a # service的名字
            port:
             number: 8000 # serivce的端口号
 - host: "user.atguigu.com" # 匹配域名
    http:
      paths:
      - type: Prefix  #Exact精确模式
        path: "/user(/|$)(.*)" # 路径重写 即访问 user.atguigu.com/user/name --> user.atguigu.com/name
        backend:
          service:
            name: b
            port:
             number: 8000

存储抽象

在这里插入图片描述

挂载目录
  • 原始方式挂载
  • 输出存储 : emptyDir,hostPath,nfs
apiVersion: apps/v1 # 版本号
kind: Deployment #资源类型
metadata: # 元数据 包含了 Pod 的元数据,例如名称、标签、命名空间
  labels: #标签
    app: mydev
  name: mydev # 部署名字
spec: # 定义了 部署的行为和构建
  replicas: 2
  selector: 
    matchLabels:
      app: mydev
  template:
    metadata:
      labels: #标签
        app: mydev
    spec:
      containers:
      - image: nginx # 镜像
        name: nginx # 镜像别名
        volumeMounts: # 卷挂载
        - name: html1 #挂载到外部,名字叫做html1
          mountPath: /usr/shard/nginx/html # 镜像内部的路径
      volumes:
        - name: html1 # 挂载方式,就是上面的html1
        nfs: #nfs形式挂载
          server: 10.11.101.1 # 挂载到外部的服务器
          path: /usr/shard/mydev1 #挂载到的地址
  • pv: 持久卷,将应用需要持久化的数据保存到指定位置
  • pvc:持久卷申明,申明需要使用的持久卷规格
    在这里插入图片描述
# 查看资源 持久化卷
kubectl get persistentvolume
kubectl get pv
  • 创建PV
apiVersion: v1 
kind: PersistentVolume # 持久化卷
metadata:
  name: pv01
spec:
  capacity:  # 容量
    storage: 10M
  accessModes:
  - ReadWriteMany # 读写模式,可读可写多节点
  storageClassName: nfss
  nfs:
    path: /nfs/data/01 # 外部电脑中的路径,需要提前创建好目录
    server: 10.11.101.1
---
apiVersion: v1 
kind: PersistentVolume # 持久化卷
metadata:
  name: pv02
spec:
  capacity:  # 容量
    storage: 1gi
  accessModes:
  - ReadWriteMany # 读写模式,可读可写多节点
  storageClassName: nfss
  nfs: #网络文件存储系统
    path: /nfs/data/02 # 外部电脑中的路径,需要提前创建好目录
    server: 10.11.101.1

# 查看资源 持久化卷申请书
kubectl get persistentvolumeclaim
kubectl get pvc
  • 创建PVC
apiVersion: v1 
kind: PersistentVolumeClaim # 持久化卷
metadata:
  name: ng-pv
spec:
  accessModes:
 - ReadWriteMany # 读写模式,可读可写多节点
  resources:
    request:
      storage: 200Mi # 需要200M
  storageClassName: nfss #此处nfss是上面创建的pv里面的nfss
  • pod 绑定pvc
apiVersion: apps/v1 # 版本号
kind: Deployment #资源类型
metadata: # 元数据 包含了 Pod 的元数据,例如名称、标签、命名空间
  labels: #标签
    app: mydev
  name: mydev # 部署名字
spec: # 定义了 部署的行为和构建
  replicas: 2
  selector: 
    matchLabels:
      app: mydev
  template:
    metadata:
      labels: #标签
        app: mydev
    spec:
      containers:
      - image: nginx # 镜像
        name: nginx # 镜像别名
        volumeMounts: # 卷挂载
        - name: html1 #挂载到外部,名字叫做html1
          mountPath: /usr/shard/nginx/html # 镜像内部的路径
      volumes:
      - name: html1 # 挂载方式,就是上面的html1
        PersistentVolumeClaim: 
          claimName: ng-pv # 与申请书绑定

配置集(configMap)

  • 抽取应用配置,并且可以自动更新
# 创建配置,redis保存到k8s的etcd中。redis.conf是redis的配置文件
kubectl create configMap redis-conf --from-file=redis.conf

# 查看配置集,配置集存储在etcd中
kubectl get configMap
kubectl get cm
apiVersion: v1 
kind: ConfigMap # 配置集
metadata:
  name: redis-c # 配置集名字
data: #所有真正的数据
  # redisco1(key) 会变成文件名,| 表示接下来是大文本,appendonly yes启用持久化存储(value)  会变成文件中的内容
  redisco1: |
    appendonly yes //启用持久化存储
    requirepass 123
# pod使用configmap
apiVersion: v1 # 版本号
kind: Pod #资源类型
metadata:
  labels: #标签
    app: mydev
  name: mydev
spec:
  containers:
  - image: redis # 镜像
    name: nginx # 镜像别名
    command: 
    - redis-server
    - "/redis-master/redis.conf" #容器内的路径
    ports:
    - port
      containerPort: 6379
    volumeMounts: # 卷挂载
    - name: data1 #挂载到外部,名字叫做data
      mountPath: /data # 镜像内部的路径
    - name: config #挂载到外部,名字叫做data
      mountPath: /redis-master # 镜像内部的路径
  volumes: # 生命存储卷
  - name: data1 # 挂载方式,就是上面的data1
    emptyDir: {} # 在pod分配到node上时,随机分配的目录,是宿主机上的一个空目录,当pod销毁时,数据也会销毁
  - name: data1 # 挂载方式,就是上面的data1
    hostPath:
      path: /root/log
      type: DirectoryOrCreate # 目录存在就使用,不存在就创建
  - name: data1 # 挂载方式,就是上面的data1
    nfs: #网络文件存储系统
      path: /nfs/data/02 # 外部电脑中的路径,需要提前创建好目录
      server: 10.11.101.1
  - name: config
    configMap:
      name: redis-c # 从配置集为【redis-c】中取配置
      items:
        key: redisco1 # 上面配置集data下面一行的redisco1
        path: redis.conf # 

Secret

  • Secret用来保存敏感信息
# 创建Secret secret-a01
kubectl create secret docker-registry secret-a01 \
--docker-uername=nihao
--docker-password=123456

kubectl create secret docker-registry regcred \
--docker-server=<镜像服务>
--docker-uername=nihao
--docker-password=123456

#  查看当前的secret
kubectl get secret

# base64加密
echo -n 'admin' | base64
# base64解密
echo YWRtaW4= | base64 -d
  • 创建Secret
apiVersion: v1 
kind: Secret # 密钥
metadata:
  name: secret-a01 # 密钥名字
type: Opaque
data:
  username: xxx #xxx 非明文格式的内容 ,base64格式
  • 引用Secret
apiVersion: v1 
kind: Pod # 配置集
metadata:
  name: my-nginx
spec:
  containers:
 - name: nginx
    image: nginx
  imagePullSecrets:
 - name: secret-a01

在这里插入图片描述

安全认证

  • HTTP Base认证:用户名+密码
  • HTTP Token认证:Token
  • HTTPS 证书认证:基于CA根证书的双向数字证书认证

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值