天天看點

kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

文章目錄

  • 一、pod的容器分類
    • 1.1、Pod 特點
    • 1.2、Pod的容器分類
  • 二、鏡像拉取政策 (image PullPolicy)
    • 2.1、嘗試編輯一個pod并指定拉取政策
  • 三、搭建 k8s 的私有倉庫

一、pod的容器分類

1.1、Pod 特點

  • 最小部署單元
  • 一組容器的集合
  • 一個Pod中的容器共享網絡命名空間
  • Pod是短暫的,有自己的生命周期。

1.2、Pod的容器分類

1、infrastructure container:基礎容器

維護整個pod網絡空間:可以在node節點操作檢視容器的網絡

[root@node01 ~]# cat /opt/kubernetes/cfg/kubelet
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

2、initcontainers:初始化容器

先于業務容器開始執行,原先pod中容器是并行開啟,現在進行了改進

3、container:業務容器

業務容器就是我們建立的pod資源内的容器服務,業務容器也叫APP容器,并行啟動

二、鏡像拉取政策 (image PullPolicy)

kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫
  • IfNotPresent:預設值,鏡像在主控端上不存在時才拉取。
  • Always:每次建立Pod都會重新拉取一次鏡像,可以保證都是最新版本鏡像。
  • Never:Pod 永遠不會主動拉取這個鏡像
  • 檢視鏡像拉取政策(master節點檢視):
[root@master01 demo]# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
nginx-deployment-d55b94fd-2vqdt   1/1     Running   0          10h
nginx-deployment-d55b94fd-f2nnf   1/1     Running   0          10h
nginx-deployment-d55b94fd-wlc76   1/1     Running   0          10h
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

2.1、嘗試編輯一個pod并指定拉取政策

[root@localhost ~]# cd demo/
[root@localhost demo]# vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: nginx
      image: nginx:1.14
      imagePullPolicy: Always

           
[root@master1 demo]# kubectl create -f pod1.yaml
pod/mypod created

[root@master01 demo]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          4m47s
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫
[root@master01 demo]# kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE             NOMINATED NODE
mypod   1/1     Running   0          19m   172.17.8.3   192.168.158.20   <none>
           

在任意node節點使用 curl 檢視頭部資訊

[root@node01 ~]# curl -I 172.17.8.3
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Tue, 26 Jan 2021 14:09:16 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes
           

三、搭建 k8s 的私有倉庫

1、開局優化,修改主機名(harbor),關閉防火牆,上傳docker-compose和harbor的軟體包(操作不在贅述),私有倉庫的IP位址為:192.168.100.134

2、docker 和 docker-compose 安裝,可以看我之前的部落格。

Docker原理和安裝及下載下傳優化

3、 安裝harbor

[root@harbor ~]# tar zxf harbor-offline-installer-v1.2.2.tgz -C /usr/local/	
[root@harbor ~]# cd /usr/local/harbor/
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

修改harbor的參數檔案harbor.cfg

[root@harbor harbor]# vi harbor.cfg 
hostname = 192.168.158.70    ##修改為監聽本地位址,不可以使用localhost或者127.0.0.1
[root@harbor harbor]# sh install.sh   
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

到這裡,harbor安裝已經完成

4、登入harbor界面,在浏覽器輸入192.168.100.134,建立私有項目project

kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

建立project項目

kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

5、所有node節點都要修改daemon-json檔案,指定harbor倉庫位址,修改完檔案後記得重新開機Docker

[root@node1 ~]# vim /etc/docker/daemon.json 
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker
           

注意:在使用harbor下載下傳鏡像建立資源時候,要保證node處于harbor登入狀态

//其中一個node節點登入harbor私有倉庫

[root@node02 ~]# docker login 192.168.158.70
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
           
//下載下傳Tomcat鏡像進行推送
[root@node1 ~]# docker pull tomcat:8.0.52

//打标簽
[root@node1 ~]# docker tag tomcat:8.0.52 192.168.158.70/project/tomcatv1
此處IP位址是harbor位址

//上傳鏡像到倉庫
[root@node1 ~]# docker push 192.168.158.70/project/tomcatv1
           

6、指定node節點從私有倉庫下載下傳

檢視node節點登入harbor的憑據(所有node節點的憑據是一樣的)

[root@node2 ~]# cat .docker/config.json |base64 -w 0
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE1OC43MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ
           

在master節點建立secret資源

[root@master1 demo]# vim registry-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registry-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE1OC43MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ
type: kubernetes.io/dockerconfigjson

//建立secret資源
[root@master test]# kubectl create -f registry-pull-secret.yaml 	   
secret/registry-pull-secret created

//檢視secret資源
[root@master1 demo]# kubectl get secret
NAME                   TYPE                                  DATA   AGE
default-token-9qgnr    kubernetes.io/service-account-token   3      13d
registry-pull-secret   kubernetes.io/dockerconfigjson        1      50s
           
kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫

在master節點上建立資源從harbor中下載下傳鏡像

[root@localhost demo]# vim tomcat-apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: my-tomcat
        image: 192.168.158.70/project/tomcatv1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat
           

建立資源并檢視

[root@master1 demo]# kubectl create -f tomcat-deployment.yaml 

[root@master1 demo]# kubectl delete -f tomcat-deployment.yaml 

[root@localhost demo]# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-7cbb557845-db9r4   1/1     Running   0          32h
my-tomcat-7cbb557845-hx92l   1/1     Running   0          32h
my-tomcat-7cbb557845-mnfbl   1/1     Running   0          32h
mypod                        1/1     Running   2          34m
           

多次操作,下載下傳次數發生改變,鏡像是從harbor拉去的

kubernetes之pod管理和私有倉庫的使用一、pod的容器分類二、鏡像拉取政策 (image PullPolicy)三、搭建 k8s 的私有倉庫
[root@master ~]# kubectl delete pod my-nginx-57667b9d9-nklvj  --force --grace-period=0 -n default
#強制删除
           

總結:建立倉庫,docker-compose支援,,修改配置檔案,監聽自己,node節點的daemon.json添加insecure-registrie:ip,node登入倉庫,推送特定版本的鏡像,檢視node節點登入harbor的憑據,在master上建立yaml,指定iamge下載下傳位置