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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM