• k8s本地仓库搭建


    自己本地搭建了个k8s集群后,因为没有设置本地仓库,以至于每次打包好的镜像服务都需要每个节点传一遍,很不方便,于是自己搭建了一个本地仓库供k8s集群使用。

    1.拉取仓库容器镜像

    docker pull registry

    2.修改/etc/docker/daemon.json

    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "insecure-registries":["192.168.1.188:9876"],
    "registry-mirrors":["http://192.168.1.188:9876"]
    }

    3.重启docker以及容器

    systemctl daemon-reload && systemctl restart docker && docker start $(docker ps -aq)

    4.启动仓库容器

    docker run -d -p 9876:5000 -v /opt/data/registry:/var/lib/registry docker.io/registry

    因为仓库容器会将上传的镜像存储在/var/lib/registry,所以最好挂一个稍微大一点的盘放这用以存放镜像。
    5.上传镜像
    因为现在已经无法修改默认仓库了,所以上传时候必须先打tag,再按tag上传

    docker tag mysql:base 192.168.1.188:9876/mysql:latest
    docker push 192.168.1.188:9876/mysql:latest

    6.下载镜像
    同理,也需要指定本地仓库的IP与端口

    docker pull 192.168.1.188:9876/mysql:latest

     这个时候就可以体验嗖嗖嗖一般的镜像下载速度了,来个deployment

    apiVersion: apps/v1 #指定api版本,此值必须在kubectl apiversion中
    kind: Deployment #指定创建资源的角色/类型
    metadata: #资源的元数据/属性
      name: redis #资源的名字,在同一个namespace中必须唯一
      labels: #设定资源的标签
        k8s-app: redis
        version: v1
        kubernetes.io/cluster-service: "true"
      annotations:            #自定义注解列表
        name: String        #自定义注解名字
    spec: #specification of the resource content 指定该资源的内容
      replicas: 1
      selector:
        matchLabels:
          redis: master   #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
      template:
        metadata:
          labels:
            redis: master  #模板名称必填
    #  restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
        spec:
          containers:
          - name: redis #容器的名字
            image: 192.168.1.188:9876/redis:base #容器使用的镜像地址
            imagePullPolicy: IfNotPresent #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
                                   # Always,每次都检查
                                   # Never,每次都不检查(不管本地是否有)
                                   # IfNotPresent,如果本地有就不检查,如果没有就拉取
            command: ['/opt/start.sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
            args: [""] #启动容器的命令参数,对应Dockerfile中CMD参数
            resources: #资源管理
              requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
                cpu: 0.2 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
                memory: 32Mi #内存使用量
              limits: #资源限制
                cpu: 1
                memory: 1000Mi
            ports:
            - containerPort: 6379 #容器开发对外的端口
              name: httpd  #名称
              protocol: TCP
            lifecycle: #生命周期管理
              postStart: #容器运行之前运行的任务
                exec:
                  command: ["bash"]
              preStop: #容器关闭之前运行的任务
                exec:
                  command: ["bash"]
            volumeMounts:  #挂载持久存储卷
            - name: redis-data #挂载设备的名字,与volumes[*].name 需要对应
              mountPath: /opt/redis/data #挂载到容器的某个路径下
              readOnly: False
          volumes: #定义一组挂载设备
          - name: redis-data #定义一个挂载设备的名字
            hostPath:
              path: /opt/redis/data #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
    kubectl create -f deployment.yaml -n kube-system
    #非常迅速的就可以拉起pod,当然前提是已经打好标签
    kubectl label nodes centos02 redis=master

    如果需要端口被本地的调试服务访问,还可以再部署个service暴露服务。

    apiVersion: v1
    kind: Service
    metadata:
      name: redis-service
    spec:
      type: NodePort
      selector:
        redis: master
      ports:
        - protocol: TCP
          port: 6379
          nodePort: 30001
  • 相关阅读:
    msyqld 的 The user specified as a definer ('root'@'%') does not exist 问题
    Python加密模块-pycryptodome
    【leetcode 简单】 第一百一十题 分发饼干
    Python数据类型-字典
    Python数据类型-集合(set)
    Python数据类型-列表(list)增删改查
    Python数据类型-元组
    Python 函数系列- Str
    Linux运维之shell脚本
    python之面向对象篇6
  • 原文地址:https://www.cnblogs.com/xu-xiaofeng/p/13837022.html
Copyright © 2020-2023  润新知