您好,登錄后才能下訂單哦!
apiVersion: v1
kind: Pod
metadata:
name: cunchujuan
spec:
containers:
- name: myapp
#定義第一容器用于顯示index.html文件內(nèi)容
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
#調(diào)用存儲卷
- name: html
#使用存儲卷的名稱要和下面定義的一樣
mountPath: /usr/share/nginx/html/
#在容器內(nèi)部掛載的路徑
- name: busybox
#定義第二個容器用于產(chǎn)生index.html內(nèi)容
image: busybox:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /data/
command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']
#該命令會不停向,存儲卷的index.html文件追加時間
volumes:
#定義存儲卷
- name: html
#定義存儲卷名稱
emptyDir: {}
#定義存儲卷類型
在上面,我們定義了2個容器,其中第二個容器是輸入日期到存儲卷的index.html當(dāng)中,因為兩個容器都是掛載的同一個存儲卷,所以第一個容器的index.html是和第二個共享的,不停curl 能看見index.html在不停的增長
apiVersion: v1
kind: Pod
metadata:
name: cs-hostpath
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
hostPath:
#存儲卷類型為 hostPath
path: /data/hostpath
#實際node節(jié)點上的路徑
type: DirectoryOrCreate
先看下調(diào)度到那個node的節(jié)點上,這邊調(diào)度到cs27節(jié)點上了
mkdir /data/hostpath/ -pv #在cs27節(jié)點上創(chuàng)建 hostpath的存儲卷文件夾
echo "hostpath存儲卷測試" >/data/hostpath/index.html #在存儲卷里生成一個主頁文件
curl 訪問一下,能看到文件內(nèi)容就是上面我們生成的
注意這邊容器在里面修改了數(shù)據(jù),是會同步到hostpath 的存儲卷的就和掛載一樣
再找一臺主機充當(dāng)nfs server
mkdir data #創(chuàng)建nfs文件夾
echo "nfs測試">index.html #創(chuàng)建測試html文件
yum install -y nfs-utils #安裝nfs 軟件
vim /etc/exports #修改nfs配置文件
/data/ 192.168.0.0/24(rw,no_root_squash)
#配置文件 路徑加共享對方的網(wǎng)段
每個node節(jié)點也要安裝 yum install -y nfs-utils ,否則無法沒掛載驅(qū)動
#在node的節(jié)點運行showmount -e 50.1.1.111 看看有沒有掛載權(quán)限
kubectl apply -f nfs.yaml #載入容器資源
查看下ip ,curl 訪問一下看是不是之前在nfs server上創(chuàng)建的html的測試文件
[root@k8s-master ~]# kubectl explain pv #查看pv的定義方式
FIELDS:
apiVersion
kind
metadata
spec
[root@k8s-master ~]# kubectl explain pv.spec #查看pv定義的規(guī)格
spec:
nfs(定義存儲類型)
path(定義掛載卷路徑)
server(定義服務(wù)器名稱)
accessModes(定義訪問模型,有以下三種訪問模型,以列表的方式存在,也就是說可以定義多個訪問模式)
ReadWriteOnce(RWO) 單節(jié)點讀寫
ReadOnlyMany(ROX) 多節(jié)點只讀
ReadWriteMany(RWX) 多節(jié)點讀寫
capacity(定義PV空間的大?。? storage(指定大小)
[root@k8s-master volumes]# kubectl explain pvc #查看PVC的定義方式
KIND: PersistentVolumeClaim
VERSION: v1
FIELDS:
apiVersion <string>
kind <string>
metadata <Object>
spec <Object>
[root@k8s-master volumes]# kubectl explain pvc.spec
spec:
accessModes(定義訪問模式,必須是PV的訪問模式的子集)
resources(定義申請資源的大小)
requests:
storage:
mkdir v{1,2,3,}
vim /etc/exports
/data/v1 192.168.0.0/24(rw,no_root_squash)
/data/v2 192.168.0.0/24(rw,no_root_squash)
/data/v3 192.168.0.0/24(rw,no_root_squash)
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
nfs:
path: /data/v1
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
spec:
nfs:
path: /data/v2
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv003
labels:
name: pv003
spec:
nfs:
path: /data/v3
server: 50.1.1.111
accessModes: ["ReadWriteMany","ReadWriteOnce",]
capacity:
storage: 5Gi
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
#name ,給下面調(diào)用的
spec:
accessModes: ["ReadWriteMany"]
#聲明訪問類型,只能匹配到,pv包含的
resources:
requests:
storage: 3Gi
#聲明需要3GB的空間,只能匹配3GB及意思的PV
---
apiVersion: v1
kind: Pod
metadata:
name: cs-hostpath
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
volumes:
- name: html
persistentVolumeClaim:
#掛載存儲卷類型為 pvc
claimName: mypvc
#指定PVC的name為 "mypvc"
Secret:用于向Pod傳遞敏感信息,比如密碼,私鑰,證書文件等,這些信息如果在容器中定義容易泄露,Secret資源可以讓用戶將這些信息存儲在急群眾,然后通過Pod進行掛載,實現(xiàn)敏感數(shù)據(jù)和系統(tǒng)解耦的效果。
ConfigMap:主要用于向Pod注入非敏感數(shù)據(jù),使用時,用戶將數(shù)據(jù)直接存儲在ConfigMap對象當(dāng)中,然后Pod通過使用ConfigMap卷進行引用,實現(xiàn)容器的配置文件集中定義和管理。
通過 --from-literal 創(chuàng)建
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456
#創(chuàng)建一個Secret namae為 mysecret
通過 --from-file創(chuàng)建
每個文件內(nèi)容對應(yīng)一個信息條目。
[root@cs25 ~]# echo "admin" >username
[root@cs25 ~]# echo "123456" >password
kubectl create secret generic mysecret2 --from-file=username --from-file=password
通過 --from-env-file創(chuàng)建
文件 env.txt 中每行 Key=Value 對應(yīng)一個信息條目。
[root@cs25 ~]# cat << EOF > env.txt
> username=admin
> password=12345
> EOF
kubectl create secret generic mysecret3 --from-env-file=env.txt
通過 YAML 配置文件:
先用base64 命令對密碼等保密的數(shù)據(jù)完成轉(zhuǎn)碼
vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecretyaml
data:
username: YWRtaW4K
password: MTIzNDU2Cg==
#鍵值
查看
#反解碼
使用secret
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: pod-secret
image: nginx
volumeMounts:
- name: foo
#掛載那個存儲卷
mountPath: "/etc/foo"
#pod 掛載的路徑
volumes:
- name: foo
#創(chuàng)建存儲卷,name,用于被pod 調(diào)用
secret:
#存儲卷類型
secretName: mysecret
#用那個文件
exec 進入容器 cd 到/etc/foo 能看到我們創(chuàng)建mysecret的key 及value
重定向數(shù)據(jù)
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: pod-secret
image: nginx
volumeMounts:
- name: foo
mountPath: "/etc/foo"
volumes:
- name: foo
secret:
secretName: mysecret
items:
#自定義存放路徑及文件名
- key: username
path: 233/name
#重定向路徑及文件名(key),注意路徑要寫相對路徑
- key: password
path: 233/pass
這時候數(shù)據(jù)都被重定向到"/etc/foo/233" 文件夾里了
使用這種方式 Secret 還支持動態(tài)更新:Secret 更新后,容器中的數(shù)據(jù)也會更新。
vim secret.yaml
kubectl apply -f secret.yaml
登錄進去查看,name 的 value已經(jīng)發(fā)生了變化
環(huán)境變量傳遞 key
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: pod-secret
image: nginx
env:
- name: username
#傳遞到容器內(nèi)部的環(huán)境變量
valueFrom:
secretKeyRef:
name: mysecret
#使用那個secret
key: username
#使用那個key
- name: password
valueFrom:
secretKeyRef:
name: mysecret
key: password
exec 登錄進去 echo 環(huán)境變量
通過環(huán)境變量 SECRET_USERNAME 和 SECRET_PASSWORD 成功讀取到 Secret 的數(shù)據(jù)。
需要注意的是,環(huán)境變量讀取 Secret 很方便,但無法支撐 Secret 動態(tài)更新。
Secret 可以為 Pod 提供密碼、Token、私鑰等敏感數(shù)據(jù);對于一些非敏感數(shù)據(jù),比如應(yīng)用的配置信息,則可以用 ConfigMap。
configmap 以上添加都支持就不一一舉例了
configmap 來個實例
vim www.conf #創(chuàng)建nging 配置文件
server {
server_name www.233.com;
listen 8860;
root /data/web/html;
}
kubectl create configmap configmap-cs --from-file=www.conf
#創(chuàng)建一個name為"configmap-cs" configmap資源,內(nèi)容就是之前創(chuàng)建的www.conf
vim nginx-configmap #創(chuàng)建pod
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: pod-secret
image: nginx
volumeMounts:
- name: nginxconf
#調(diào)用名為"nginxconf"的存儲卷
mountPath: /etc/nginx/conf.d/
volumes:
- name: nginxconf
#創(chuàng)建存儲卷
configMap:
#存儲卷類型為configMap
name: configmap-cs
#使用configmap里面的"configmap-cs"這個資源
kubectl apply -f nginx-configmap.yaml #載入啟動
查看IP 訪問我剛才定義的資端口,能正常訪問說明配置文件生效了。
登錄進去查看文件
kubectl edit configmaps configmap-cs
#命令修改資源,使用方法和vim 一樣使用
POD掛載過程
POD先掛載名為"nginxconf"的存儲卷
"nginxconf"的存儲卷的內(nèi)容是調(diào)用configMap資源里 "configmap-cs"這個資源生成的
"configmap-cs" 這個資源是讀取www.conf 文件生成的
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。