国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

邁入Docker、Kubernetes容器世界的大門

tracy / 1766人閱讀

說明

? 本文通過簡單的示例,帶領(lǐng)初學(xué)者快速邁入DockerKubernetes(K8S)容器世界的大門。假設(shè),你已擁有一個K8S集群,否則,可通過minikubeminishift快速搭建一實驗環(huán)境。

Docker DockerK8S

? Docker本質(zhì)上是一種虛擬化技術(shù),類似于KVMXENVMWARE,但其更輕量化,且將Docker部署在Linux環(huán)境時,其依賴于Linux容器技術(shù)(LXC)。Docker較傳統(tǒng)KVM等虛擬化技術(shù)的一個區(qū)別是無內(nèi)核,即多個Docker虛擬機共享宿主機內(nèi)核,簡而言之,可把Docker看作是無內(nèi)核的虛擬機,每Docker虛擬機有自己的軟件環(huán)境,相互獨立。

? K8SDocker之間的關(guān)系,如同Openstack之于KVMVSphere之于VMWAREK8S是容器集群管理系統(tǒng),底層容器虛擬化可使用Docker技術(shù),應(yīng)用人員無需與底層Docker節(jié)點直接打交道,通過K8S統(tǒng)籌管理即可。

Docker基礎(chǔ)

? 如下所示,運行docker run -it --name test-docker busybox /bin/sh命令,觀察其輸出,可發(fā)現(xiàn)docker先在本地查找名為busybox鏡像(Image)1,若本地?zé)o鏡像,則從docker.io官方鏡像庫(Registry)下載鏡像后保存到本地,接著以此鏡像構(gòu)建一個名為test-docker虛擬機,其Docker官方術(shù)語命名為容器(Container)

# docker run -it --name test-docker busybox /bin/sh
Unable to find image "busybox:latest" locally
Trying to pull repository docker.io/library/busybox ... 
latest: Pulling from docker.io/library/busybox
f70adabe43c0: Pull complete 
Digest: sha256:186694df7e479d2b8bf075d9e1b1d7a884c6de60470006d572350573bfa6dcd2
/ # 

? Docker較傳統(tǒng)KVMVMware虛擬機更輕量,如下所示,test-docker容器不會運行額外的系統(tǒng)與內(nèi)核進程,其僅運行docker run命令提供的/bin/sh進程:

/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sh
    7 root      0:00 ps -ef

? 如在Openstack中創(chuàng)建虛擬機,首先需在Glance鏡像庫中存儲虛擬機鏡像,而后才能選擇鏡像以創(chuàng)建虛擬機。Docker同理,且官方提供一共享的鏡像倉庫(Registry),其中存儲了各式各樣的鏡像(Image)。如本例用busybox鏡像創(chuàng)建容器,其鏡像被拉(pull)到了本地,可執(zhí)行如下命令檢查發(fā)現(xiàn)其僅1MB左右,相當(dāng)輕量。

# docker images|grep busybox
docker.io/busybox         latest              8ac48589692a        5 weeks ago         1.146 MB

? 通過本節(jié),我們了解了3個Docker基本要素:鏡像倉庫(Registry)中存儲了鏡像(Image),而鏡像(Image)包含了程序運行所需的軟件環(huán)境,當(dāng)部署容器(Container)時,鏡像(Image)通過網(wǎng)絡(luò)被拉取到Doker主機(Node)

Kubernetes

? K8SGoogle開源容器集群管理系統(tǒng),其源于Google內(nèi)部管理系統(tǒng)Borg,以下將通過一個個簡單連貫的示例,帶領(lǐng)初學(xué)者熟悉K8S集群。

Pod

? K8SPod為最小單位來調(diào)度并管理Docker容器(Container),其中1個Pod可含多個容器,且相同Pod里的容器共享本地網(wǎng)絡(luò),容器間可通過localhost地址互訪,即容器如同部署在相同的主機上,而以Pod為最小單元來調(diào)度則表明:Pod內(nèi)的容器被調(diào)度到相同的Docker節(jié)點上。

? 如下所示,創(chuàng)建一名為myhttpPod,其包含一個使用httpd鏡像部署的容器,容器名為myhttp

# cat > /tmp/myhttpd.pod <

? 執(zhí)行kubectl get pod命令觀察Pod運行成功后,接著驗證容器能提供web服務(wù):

# kubectl get pod
NAME         READY     STATUS    RESTARTS   AGE
myhttp       1/1       Running   0          1h
# kubectl describe pod myhttp|grep IP
IP:           10.129.0.232
# curl 10.129.0.232

It works!

Deployment

? 將應(yīng)用直接以Pod形式部署很少見,主因是:Pod無法提供彈性伸縮,且節(jié)點故障時K8S無法將其調(diào)度到幸存節(jié)點上,缺少自愈能力。鑒于此,應(yīng)用常使用“鏡像(Rc)/部署(Deployment)”部署,且在K8S新版本中,官方推薦用Deployment替代Rc部署無狀態(tài)(Stateless)應(yīng)用。

? 執(zhí)行kubectl delete pod myhttp刪除pod后,換成以Deployment部署:

# cat > myhttp.yaml <

? Deployment中的.spec.replicas表明部署多少個Pod,如本例當(dāng)前僅含一Pod

# kubectl get deploy,pod
NAME            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/myhttp   1         1         1            1           2m

NAME                         READY     STATUS    RESTARTS   AGE
po/myhttp-7bc6d8b87c-gzlkq   1/1       Running   0          2m

? 執(zhí)行kubectl delete pod 刪除Pod后,可發(fā)現(xiàn)deployment將自動重建pod,其將確保擁有.spec.replicaspod數(shù)量,即意味著,當(dāng)pod異常時,deployment具備自愈特性。

# kubectl delete pod myhttp-7bc6d8b87c-gzlkq

# kubectl get pod -w
NAME                      READY     STATUS              RESTARTS   AGE
myhttp-7bc6d8b87c-dhmtz   0/1       ContainerCreating   0          2s
myhttp-7bc6d8b87c-dhmtz   1/1       Running             0          8s
myhttp-7bc6d8b87c-gzlkq   1/1       Terminating         0          8m

? 當(dāng)需伸縮或擴展應(yīng)用時,若以Pod形式部署,則需刪除或創(chuàng)建Pod,而若使用Deployment部署,則我們僅需調(diào)整.spec.replicas,而后K8S鏡像控制器將自動調(diào)整Pod數(shù)量。如下所示,擴展http應(yīng)用為2服務(wù):

# kubectl scale deploy/myhttp --replicas=2

# kubectl get pod -w
NAME                      READY     STATUS              RESTARTS   AGE
myhttp-7bc6d8b87c-cj4g8   0/1       ContainerCreating   0          3s
myhttp-7bc6d8b87c-zsbcc   1/1       Running             0          8m
myhttp-7bc6d8b87c-cj4g8   1/1       Running   0         18s

# kubectl get deploy
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myhttp    2         2         2            2           21m

? 執(zhí)行kubectl delete pod 刪除Pod后,可發(fā)現(xiàn)Pod名(即容器主機名)及IP是隨機分配的,那么,我們該如何訪問應(yīng)用?

# kubectl get pod
# kubectl describe pod myhttp-7bc6d8b87c-cj4g8|grep IP
IP:             10.129.3.28
Service

? Service服務(wù)類似于傳統(tǒng)的F5A10等硬件負(fù)載均衡,但其在K8S中通過軟件實現(xiàn),且當(dāng)伸縮應(yīng)用時可實時跟蹤后端Server,無需人為調(diào)整。

內(nèi)部訪問

我們將對上節(jié)部署的myhttp應(yīng)用創(chuàng)建一個Service服務(wù),但在此前,先創(chuàng)建一個Pod作為集群內(nèi)部客戶端以用于后續(xù)Service驗證。因下面驗證Svc將使用curl工具,而官方centos鏡像包含此工具,故用此鏡像創(chuàng)建Pod,且為保證Pod一直運行不退出,使用了command在前臺執(zhí)行了無限循環(huán)命令。

# kubectl create -f - <

? 執(zhí)行如下命令為myhttp應(yīng)用創(chuàng)建一個myhttp-int的服務(wù):

# kubectl expose deployment myhttp --port=8080 --target-port=80 --name=myhttp-int
service "myhttp-int" exposed

? 上面命令等價于使用下面的Yaml文件手動創(chuàng)建Service:創(chuàng)建名為myhttp-int的服務(wù),其8080端口指向后端服務(wù)的80端口,而后端服務(wù)是通過selector選擇label(標(biāo)簽)app:myhttpPod,觀察myhttp Deployment,可發(fā)現(xiàn).spec.template.metadata.labels定義的標(biāo)簽就是app:myhttp,故而,通過myhttp-int:8080即可訪問myhttp服務(wù)。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myhttp
  name: myhttp-int
spec:
  clusterIP:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: myhttp
  sessionAffinity: None

? 在測試容器中通過myhttp-int:8080訪問Service,可發(fā)現(xiàn)將負(fù)載均衡到后端的兩pod上:

# kubectl get pod
NAME                      READY     STATUS    RESTARTS   AGE
myclient                  1/1       Running   0          1h
myhttp-7bc6d8b87c-cj4g8   1/1       Running   0          1d
myhttp-7bc6d8b87c-zsbcc   1/1       Running   0          1d

# 重置web主頁,輸出每Pod名稱以便后續(xù)觀察
# kubectl exec myhttp-7bc6d8b87c-cj4g8 -it -- sh -c "hostname>htdocs/index.html"
# kubectl exec myhttp-7bc6d8b87c-zsbcc -it -- sh -c "hostname>htdocs/index.html"

# kubectl exec -it myclient -- curl myhttp-int:8080
myhttp-7bc6d8b87c-cj4g8
# kubectl exec -it myclient -- curl myhttp-int:8080
myhttp-7bc6d8b87c-zsbcc

? 當(dāng)伸縮Pod時,我們可通過如下命令觀察到Service將動態(tài)跟蹤后端(Endpoints)服務(wù):

# kubectl get endpoints myhttp-int
NAME         ENDPOINTS                        AGE
myhttp-int   10.129.0.237:80,10.129.3.28:80   1h

# kubectl scale deploy myhttp --replicas=3
# kubectl get endpoints myhttp-int
NAME         ENDPOINTS                                        AGE
myhttp-int   10.129.0.237:80,10.129.3.28:80,10.131.0.194:80   1h
外部訪問

? 若應(yīng)用需向K8S集群外提供服務(wù),則可創(chuàng)建類型為NodePortService,此時K8S集群上所有節(jié)點均監(jiān)聽nodePort指定的端口,故外部應(yīng)用可通過集群中任一節(jié)點訪問集群內(nèi)部提供的服務(wù)。

# kubectl create -f - <

? 執(zhí)行如下命令檢查服務(wù),發(fā)現(xiàn)一個為ClusterIP類型,一個為NodePort類型,但兩者均分配了ClusterIP地址:

# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
myhttp-int   ClusterIP   172.30.37.43           8080/TCP         1h
myhttp-pub   NodePort    172.30.6.69            8080:30001/TCP   3m

? myhttp-pub服務(wù)通過nodePort打開了集群各節(jié)點的主機端口,此時可通過集群任何節(jié)點訪問服務(wù):

# curl 192.168.220.21:30001
myhttp-7bc6d8b87c-zsbcc
# curl 192.168.230.21:30001
myhttp-7bc6d8b87c-zsbcc
# curl 192.168.240.21:30001
myhttp-7bc6d8b87c-cj4g8

? 通過NodePort類型的Service雖可將服務(wù)暴露到集群外部,但問題是:端口數(shù)量有限(限制為30000-32767)、節(jié)點故障后,通過此節(jié)點訪問服務(wù)將失敗。鑒于此原因,NodePort類型的Service不常用,而是換成使用Ingress的技術(shù)來暴露服務(wù)到集群外部,但為簡單考慮,本文不再講解Ingress

Configmap

? 當(dāng)容器異常時,鏡像控制器用Image重建Container,此時對容器的修改會丟失,故而,若需自定義httpd鏡像的httpd.conf文件,我們不應(yīng)直接登錄各容器修改配置,而應(yīng)考慮使用K8S提供的Configmap2技術(shù),其作為中央存儲配置庫所創(chuàng)建的文件將Pod共享。

? 如下所示,為簡單考慮,我們隨意創(chuàng)建一文件并掛載到Deployment中,修改Configmap,擴展Deployment,用此來講解Configmap作用。

創(chuàng)建一名為my-configcm3


# kubectl create -f  - <

執(zhí)行kubectl edit deploy myhttp修改Deployment,將cm掛載到/etc/myhosts目錄中。完整Yaml文件如下(PS:添加volumeMountsvolume):


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: myhttp
  name: myhttp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myhttp
  template:
    metadata:
      labels:
        app: myhttp
    spec:
      containers:
      - image: httpd
        name: myhttp
        volumeMounts:
        - name: config-hosts
          mountPath: /etc/myhosts
      volumes:
      - name: config-hosts
        configMap:
          name: my-config

? 修改Deploy后,可發(fā)現(xiàn)Pod將自動重建,而后檢查每Pod可發(fā)現(xiàn)目錄中含有cmhosts文件:

# kubectl get pod
NAME                      READY     STATUS    RESTARTS   AGE
myhttp-774ffbb989-gz6bd   1/1       Running   0          11m
myhttp-774ffbb989-k8m4b   1/1       Running   0          11m
myhttp-774ffbb989-t74nk   1/1       Running   0          11m

# kubectl exec -it myhttp-774ffbb989-gz6bd  -- ls /etc/myhosts
hosts
# kubectl exec -it myhttp-774ffbb989-gz6bd  -- cat /etc/myhosts/hosts
127.0.0.1   localhost localhost.localdomain
#::1        localhost localhost.localdomain

修改cm,幾分鐘后,可發(fā)現(xiàn)pod中的配置被自動更新:


# kubectl edit cm my-config
...
data:
  hosts: |
    127.0.0.1   localhost localhost.localdomain
    ::1        localhost localhost.localdomain
...

# kubectl exec -it myhttp-774ffbb989-gz6bd  -- cat /etc/myhosts/hosts
127.0.0.1   localhost localhost.localdomain
::1        localhost localhost.localdomain

擴展應(yīng)用,繼而檢查新的Pod,發(fā)現(xiàn)其包含cm內(nèi)容:


# kubectl scale deploy myhttp --replicas=4
# kubectl get pod
myhttp-774ffbb989-gz6bd   1/1       Running   0          15h
myhttp-774ffbb989-k8m4b   1/1       Running   0          15h
myhttp-774ffbb989-t74nk   1/1       Running   0          15h
myhttp-774ffbb989-z5d6h   1/1       Running   0          21s

# kubectl exec -it myhttp-774ffbb989-z5d6h  -- cat /etc/myhosts/hosts
127.0.0.1   localhost localhost.localdomain
::1        localhost localhost.localdomain
Secret

? 相較于Configmap用于保存明文,那么Secret則保存密文,如用戶密碼等銘感數(shù)據(jù),可使用Secret加密保存。如下所示,我們創(chuàng)建一個Secret加密用戶與密碼,而后提供給容器使用。

OpaqueSecret數(shù)據(jù)是一個map類型,要求valuebase64編碼格式。加密用戶與密碼:


# echo -n root | base64
cm9vdA==
# echo -n Changeme | base64
Q2hhbmdlbWU=

創(chuàng)建名為userpwd-secretSecret,其包含用戶與密碼:


#  kubectl create -f - <

更新deployment,將secretvolume方式掛載到容器中:


# kubectl edit deployment myhttp
...
spec:
...
    spec:
      containers:
      - image: httpd
      ...
        volumeMounts:
        - name: userpwd
          mountPath: /etc/mysecret
      ...
      volumes:
      - name: userpwd
        secret:
          secretName: userpwd-secret
...

登錄容器可發(fā)現(xiàn)secret中的key被保存為文件,其內(nèi)容為value,但在容器內(nèi)已被正確解密:


# kubectl exec -it myhttp-64575c77c-kqdj9 -- ls -l /etc/mysecret
lrwxrwxrwx. 1 root root 15 May 17 07:01 password -> ..data/password
lrwxrwxrwx. 1 root root 15 May 17 07:01 username -> ..data/username

# kubectl exec -it myhttp-64575c77c-kqdj9 -- cat /etc/mysecret/username
root
Storage

? 我們將web應(yīng)用保存到外部存儲中,而后掛載到Pod上,這樣,無論pod是否重建亦或伸縮,我們發(fā)布的應(yīng)用都不會丟失。

配置NFS存儲

為簡單考慮,本例采用NFS作為共享存儲:

nfs服務(wù)器安裝軟件:

# yum install nfs-utils

配置共享目錄:

# mkdir -p /exports/httpd
# chmod 0777 /exports/*
# chown nfsnobody:nfsnobody /exports/*
# cat > /etc/exports.d/k8s.exports <

配置防火墻,放行nfs端口:

# firewall-cmd --add-port=2049/tcp
# firewall-cmd --permanent --add-port=2049/tcp

配置Selinux以允許Docker寫數(shù)據(jù)到nfs

# getsebool -a|grep virt_use_nfs
# setsebool -P virt_use_nfs=true

啟動nfs服務(wù):

# systemctl restart nfs-config
# systemctl restart nfs-server
# systemctl enable nfs-server
K8S集群使用存儲

K8S集群每節(jié)點安裝nfs客戶端軟件,并設(shè)置Selinux權(quán)限:

# yum install nfs-utils
# setsebool -P virt_use_nfs=true

創(chuàng)建一類型為nfs的持久化卷:PersistentVolume(PV),其指向nfs后端存儲:

# kubectl create -f - <

創(chuàng)建一持久化卷聲明PersistentVolumeClaim(PVC)指向上一步創(chuàng)建的PV

# kubectl create -f - <

檢查可發(fā)現(xiàn)pvc/httpd綁定到pv/httpd

# oc get pv,pvc
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM   ...   
pv/httpd     1Gi        RWX            Retain           Bound    demo/httpd  ...

NAME         STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc/httpd    Bound     httpd     1Gi        RWX                           53s

重建deployment,添加volumemount掛載點:

# kubectl delete deploy myhttp
# kubectl create -f - <

Pod生成后,檢查發(fā)現(xiàn)nfs目錄被掛載到容器內(nèi):

# kubectl get pod
# kubectl exec -it myhttp-8699b7d498-dlzrm -- df -h
Filesystem                       Size  Used Avail Use% Mounted on
...
192.168.240.11:/exports/httpd    37G   17G   21G  44% /usr/local/apache2/htdocs               ...
# kubectl exec -it myhttp-8699b7d498-dlzrm -- ls htdocs       # 當(dāng)前目錄為空

登錄任何一個容器,將web應(yīng)用發(fā)布到htdocs目錄:

# kubectl exec -it myhttp-8699b7d498-dlzrm -- /bin/sh
# echo "this is a test of pv" > htdocs/index.html             # 容器內(nèi)

而后,我們刪除容器亦或擴展容器,均會發(fā)現(xiàn)容器中的htdocs包含所發(fā)布的應(yīng)用:

# kubectl delete pod -l app=myhttp                            # 刪除所有myhttp pod
# kubectl get pod                                             # 等待pod重建完畢
# kubectl exec -it myhttp-8699b7d498-6q8tv -- cat htdocs/index.html
this is a test of pv
Satefulset

? 如上面用Deplyment創(chuàng)建的myhttp應(yīng)用,其是無狀態(tài)(stateless)的,主機名是隨機動態(tài)分配的,且所有Pod可共享掛載相同的存儲(volume),但如KafakaZookeeper集群,其是有狀態(tài)的,需要主機名確定為一,且各自掛載存儲,鑒于此,K8S提供了Satefulset技術(shù)來滿足此類應(yīng)用需求。

? 如下所示,我們使用nginx鏡像創(chuàng)建一個有狀態(tài)的集群,用此來講解Statefulset用法。

不同于Deployment,我們必須先創(chuàng)建一個ClusterIP: NoneService服務(wù):

# kubectl create -f - <

ServiceClusterIP,也即我們無法直接通過此Servcie訪問后端服務(wù)。

# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
web          ClusterIP   None                   80/TCP           3s

創(chuàng)建名為nginx的有狀態(tài)服務(wù),鏡像數(shù)為2,且注意ServiceName配置為上步創(chuàng)建的Svc

# kubectl create -f - <

觀察pod啟動,可發(fā)現(xiàn)pod名稱為nginx-n格式4,此名稱是固定唯一的,且可發(fā)現(xiàn)pod是順序啟動的,即容器nginx-nnginx-后啟動。

# kubectl get pod -w
NAME                     READY     STATUS              RESTARTS   AGE
nginx-0                  0/1       ContainerCreating   0          7s
nginx-0                  1/1       Running             0          10s
nginx-1                  0/1       Pending             0          0s
nginx-1                  0/1       Pending              0          0s
nginx-1                   0/1       ContainerCreating   0          1s
nginx-1                    1/1       Running             0          13s

創(chuàng)建的servicestatefulset用在dns上以跟蹤pod名稱:

# kubectl run -i --tty --image busybox dns-test --restart=Never --rm /bin/sh
# 如下操作均在剛創(chuàng)建的dns-test pod中進行:

# nslookup web                            # 查找web服務(wù),可發(fā)現(xiàn)后端有兩pod
...

Name:      web
Address 1: 10.129.0.248 nginx-0.web.demo.svc.cluster.local
Address 2: 10.131.0.200 nginx-1.web.demo.svc.cluster.local

# nslookup nginx-0.web                    # 驗證pod名稱對應(yīng)的IP地址
...
Name:      nginx-0.web.demo.svc.cluster.local
Address 1: 10.129.0.248 nginx-0.web.demo.svc.cluster.local

# nslookup nginx-1.web
...
Name:      nginx-1.web.demo.svc.cluster.local
Address 1: 10.131.0.200 nginx-1.web.demo.svc.cluster.local

配置satefulset掛載volume

# kubectl delete statefulset nginx        # 為簡單起見,刪除以上創(chuàng)建的statefulset
# kubectl create -f - <

? 注意:在volumeClaimTemplates.spec中添加的storageClassName,其指定了名為glusterfs-raid0的存儲,這樣,當(dāng)pod生成時,k8s會使用動態(tài)提供5創(chuàng)建PVC、PV并自動從存儲池glusterfs-raid0中動態(tài)分配volume。當(dāng)然,若使用Storage一節(jié)中配置的nfs存儲,則此處需刪除storageClassName,而后手動創(chuàng)建存儲、pv、pvc

檢查:

# 如下卷是k8s使用動態(tài)提供自動從glusterfs創(chuàng)建的:
# kubectl get pvc
NAME          STATUS    VOLUME                CAPACITY   ACCESS MODES   STORAGECLASS      AGE
www-nginx-0   Bound     pvc-4a76e4a9...       1Gi        RWO            glusterfs-raid0   22h
www-nginx-1   Bound     pvc-536e8980...       1Gi        RWO            glusterfs-raid0   22h

# kubectl get statefulset,pod
NAME                 DESIRED   CURRENT   AGE
statefulsets/nginx   2         2         22h

NAME                        READY     STATUS    RESTARTS   AGE
po/nginx-0                  1/1       Running   0          22h
po/nginx-1                  1/1       Running   0          22h

# 兩Pod掛載各自的卷:
# kubectl exec -it nginx-0 -- df -h
Filesystem                         Size  Used Avail Use% Mounted on              
192.168.220.21:vol_e6858...       1016M   33M  983M   4% /usr/share/nginx/html

# kubectl exec -it nginx-1 -- df -h
Filesystem                         Size  Used Avail Use% Mounted on              
192.168.220.21:vol_c659cc...       1016M   33M  983M   4% /usr/share/nginx/html
Namespace

? 細(xì)心的讀者會在Storage一節(jié)中看到demo/httpd,此demo就是作者所使用的Namespace/Project6。如同Openstack云計算平臺提供了多租戶用途,其每租戶可創(chuàng)建自己的Project(項目)K8S同樣提供多租戶功能,我們可創(chuàng)建不同的Namespace(命名空間),并將以上所示的PodServiceConfigmap等限制在Namespace中。

? 剛搭建的K8S集群,默認(rèn)有如下兩Namespace

# kubectl get namespace
NAME                                DISPLAY NAME   STATUS
default                                            Active         # 默認(rèn)命名空間
kube-system                                        Active         # k8s自身使用的命名空間

? 我們可執(zhí)行如下命令創(chuàng)建命名空間:

# kubectl create namespace demo
namespace "demo" created

? 而后,執(zhí)行kubectl命令時可附帶”-n “參數(shù)。如下所示,查詢Pod

# kubectl get pod -n demo
NAME                     READY     STATUS    RESTARTS   AGE
nginx-0                  1/1       Running   0          23h
nginx-1                  1/1       Running   0          23h

? 最后,對于Openshift平臺,我們可執(zhí)行如下命令登錄到Namespace中,這樣,我們就無需每次附帶“-n ”了。

# oc project demo
# oc get pod
NAME                     READY     STATUS    RESTARTS   AGE
nginx-0                  1/1       Running   0          23h
nginx-1                  1/1       Running   0          23h
結(jié)束語

? 通過本文,我們學(xué)習(xí)了DockerK8S核心知識,我相信讀者應(yīng)完全可以熟練使用K8S平臺了。


  • 鏡像格式為::,若不寫image_tag,則默認(rèn)為latest tag ?

  • 參考官方文檔:Configure a Pod to Use a ConfigMap。 ?

  • 內(nèi)容為key:value格式,且一個cm可包含多個 ?

  • statefulset名稱的生成規(guī)則是固定的:-n ?

  • 存儲必須支持動態(tài)提供,如glusterfs存儲,要支持動態(tài)提供,必須配置heketi; ?

  • Openshift平臺,其Project即為K8SNamespace ?

  • 文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/33045.html

    相關(guān)文章

    • 邁入DockerKubernetes容器世界大門

      說明 ? 本文通過簡單的示例,帶領(lǐng)初學(xué)者快速邁入Docker、Kubernetes(K8S)容器世界的大門。假設(shè),你已擁有一個K8S集群,否則,可通過minikube或minishift快速搭建一實驗環(huán)境。 Docker Docker與K8S ? Docker本質(zhì)上是一種虛擬化技術(shù),類似于KVM、XEN、VMWARE,但其更輕量化,且將Docker部署在Linux環(huán)境時,其依賴于L...

      MASAILA 評論0 收藏0
    • 邁入DockerKubernetes容器世界大門

      說明 ? 本文通過簡單的示例,帶領(lǐng)初學(xué)者快速邁入Docker、Kubernetes(K8S)容器世界的大門。假設(shè),你已擁有一個K8S集群,否則,可通過minikube或minishift快速搭建一實驗環(huán)境。 Docker Docker與K8S ? Docker本質(zhì)上是一種虛擬化技術(shù),類似于KVM、XEN、VMWARE,但其更輕量化,且將Docker部署在Linux環(huán)境時,其依賴于L...

      Moxmi 評論0 收藏0
    • Docker - 通往新世界大門

      摘要:刪除鏡像表示強行刪除是將鏡像保存成文件加載鏡像結(jié)語是個好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規(guī)模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請關(guān)注 showImg(https://segmentfault.com/img/remote/1460000014989024?w=1292&h=710); 引言 相信很多技術(shù)同學(xué)在開發(fā)時都會使用虛擬機,配...

      cncoder 評論0 收藏0
    • PHPer書單

      摘要:想提升自己,還得多看書多看書多看書下面是我收集到的一些程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧當(dāng)然,如果你有好的書想分享給大家的或者覺得書單不合理,可以去通過進行提交。講師溫銘,軟件基金會主席,最佳實踐作者。 想提升自己,還得多看書!多看書!多看書!下面是我收集到的一些PHP程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧!當(dāng)然,如果你有好的書想分享給大家的或者...

      jimhs 評論0 收藏0
    • Kubernetes成為世界500強數(shù)字化轉(zhuǎn)型基礎(chǔ)原因(以及云基礎(chǔ)設(shè)施管理平臺一覽表)

      摘要:最近在舉辦的上描述,他們?nèi)狈Ρ匾拈_源社區(qū),網(wǎng)絡(luò)貢獻者,以及一線開發(fā)人員和客戶,成為深受大家歡迎擁護的基礎(chǔ)技術(shù)。 大約18個月之前,科技出版物中充斥著容器,以及他們將如何從根本上改變企業(yè)IT的新聞。我們在這些說的天花亂墜的新市場中提取信息,匯總到容器的現(xiàn)狀博客。基于我們的研究,可以清楚的看到,容器的確造就了市場趨勢,而且代表了十年來的一次在企業(yè)基礎(chǔ)設(shè)施方面的轉(zhuǎn)型,這樣的轉(zhuǎn)型會重新塑整個...

      godiscoder 評論0 收藏0

    發(fā)表評論

    0條評論

    最新活動
    閱讀需要支付1元查看
    <