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

 

posted @ 2020-10-18 20:41  有虫子啊  阅读(2099)  评论(0编辑  收藏  举报