1。創建Service提供對外訪問的接口
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
ports:
- port: 88
targetPort: 80
selector:
app: nginx
####
apiVersion: 指定版本
kind: 類型
name: 指定服務名稱
labels: 標籤
port: Service 服務暴露的端口
targetPort: 容器暴露的端口
seletor: 關聯的Pod的標籤
創建service
# kubectl create -f nginx-service.yaml
查看service(訪問Pod是有負載均衡的)
[root@master-01 YAML_k8s]# kubectl get svc/nginx-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service ClusterIP 10.254.131.176 <none> 88/TCP 1m
# curl 10.254.131.176:88
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
對service的描述
# kubectl describe svc/nginx-service
Name: nginx-service
Namespace: default
Labels: app=nginx
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP: 10.254.131.176
Port: <unset> 88/TCP
TargetPort: 80/TCP
Endpoints: 10.20.184.19:80,10.20.184.84:80,10.20.190.62:80 + 2 more...
Session Affinity: None
Events: <none>
2。回滾到以前的版本
# kubectl rollout history deploy/nginx-deployment
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
# kubectl rollout history deploy/nginx-deployment --revision=3
deployments "nginx-deployment" with revision #3
Pod Template:
Labels: app=nginx
pod-template-hash=2603790434
Containers:
nginx:
Image: nginx:1.12
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
# 回滾到上一個版本
# kubectl rollout undo deploy/nginx-deployment
deployment.apps "nginx-deployment"
# 查看版本
# kubectl describe deploy/nginx-deployment
...
...
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.11
回滾到指定版本
# kubectl rollout history deploy/nginx-deployment
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
# 指定版本
# kubectl rollout undo deploy/nginx-deployment --to-revision=1
deployment.apps "nginx-deployment"
一個具體的yaml解釋文件
# yaml格式的pod定義文件完整內容:
apiVersion: v1 #必選,版本號,例如v1
kind: Pod #必選,Pod
metadata: #必選,元數據
name: string #必選,Pod名稱
namespace: string #必選,Pod所屬的命名空間
labels: #自定義標籤
- name: string #自定義標籤名字
annotations: #自定義註釋列表
- name: string
spec: #必選,Pod中容器的詳細定義
containers: #必選,Pod中容器列表
- name: string #必選,容器名稱
image: string #必選,容器的鏡像名稱
imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
command: [string] #容器的啓動命令列表,如不指定,使用打包時使用的啓動命令
args: [string] #容器的啓動命令參數列表
workingDir: string #容器的工作目錄
volumeMounts: #掛載到容器內部的存儲卷配置
- name: string #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名
mountPath: string #存儲卷在容器內mount的絕對路徑,應少於512字符
readOnly: boolean #是否爲只讀模式
ports: #需要暴露的端口庫號列表
- name: string #端口號名稱
containerPort: int #容器需要監聽的端口號
hostPort: int #容器所在主機需要監聽的端口號,默認與Container相同
protocol: string #端口協議,支持TCP和UDP,默認TCP
env: #容器運行前需設置的環境變量列表
- name: string #環境變量名稱
value: string #環境變量的值
resources: #資源限制和請求的設置
limits: #資源限制的設置
cpu: string #Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數
memory: string #內存限制,單位可以爲Mib/Gib,將用於docker run --memory參數
requests: #資源請求的設置
cpu: string #Cpu請求,容器啓動的初始可用數量
memory: string #內存清楚,容器啓動的初始可用數量
livenessProbe: #對Pod內個容器健康檢查的設置,當探測無響應幾次後將自動重啓該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法即可
exec: #對Pod容器內檢查方式設置爲exec方式
command: [string] #exec方式需要制定的命令或腳本
httpGet: #對Pod內個容器健康檢查方法設置爲HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #對Pod內個容器健康檢查方式設置爲tcpSocket方式
port: number
initialDelaySeconds: 0 #容器啓動完成後首次探測的時間,單位爲秒
timeoutSeconds: 0 #對容器健康檢查探測等待響應的超時時間,單位秒,默認1秒
periodSeconds: 0 #對容器監控檢查的定期探測時間設置,單位秒,默認10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged:false
restartPolicy: [Always | Never | OnFailure]#Pod的重啓策略,Always表示一旦不管以何種方式終止運行,kubelet都將重啓,OnFailure表示只有Pod以非0退出碼退出才重啓,Nerver表示不再重啓該Pod
nodeSelector: obeject #設置NodeSelector表示將該Pod調度到包含這個label的node上,以key:value的格式指定
imagePullSecrets: #Pull鏡像時使用的secret名稱,以key:secretkey格式指定
- name: string
hostNetwork:false #是否使用主機網絡模式,默認爲false,如果設置爲true,表示使用宿主機網絡
volumes: #在該pod上定義共享存儲卷列表
- name: string #共享存儲卷名稱 (volumes類型有很多種)
emptyDir: {} #類型爲emtyDir的存儲卷,與Pod同生命週期的一個臨時目錄。爲空值
hostPath: string #類型爲hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
path: string #Pod所在宿主機的目錄,將被用於同期中mount的目錄
secret: #類型爲secret的存儲卷,掛載集羣與定義的secre對象到容器內部
scretname: string
items:
- key: string
path: string
configMap: #類型爲configMap的存儲卷,掛載預定義的configMap對象到容器內部
name: string
items:
- key: string
mysql配置文件yaml
mysql_rc文件
apiVersion: v1
kind: ReplicationController #類型爲副本控制器RC
metadata:
name: mysql #RC的名稱,全局唯一
spec:
replicas: 1 #POD副本期待數量
selector:
app: mysql #符合目標的Pod擁有此標籤
template: #根據此模板創建Pod的副本
metadata:
labels:
app: mysql #Pod副本擁有的標籤,對應RC的Selector
spec:
containers: #Pod內容器的定義部分
- name: mysql #容器的名稱
image: mysql.io/mysql:latest #容器對應的Docker Image
ports:
- containerPort: 3306 #容器應用監聽的端口號
env: #注入容器內的環境變量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_SERVER_ID
value: "1"
mysql數據持久化 (基於nfs)
cat mysql_rc.yaml
apiVersion: v1 #版本號
kind: ReplicationController #使用rc資源類型
metadata:
name: mymysql #pod的名稱
spec:
replicas: 1 #啓動副本的數量
selector:
app: mymysql
template:
metadata:
labels:
app: mymysql
spec:
containers:
- name: mymysql #自定義鏡像名稱
image: mysql:5.6.20 #鏡像信息
ports:
- containerPort: 3306 #鏡像的端口號
env: #定義環境變量
- name: MYSQL_ROOT_PASSWORD #定義mysql的root密碼
value: "123456" #root密碼
volumeMounts:
- mountPath: /var/lib/mysql #容器的掛載路徑
readOnly: false #可讀可寫
name: mysql1-data #自定義名稱
volumes:
- name: mysql1-data #宿主機的自定義名稱
nfs: #使用宿主機的nfs方式掛載
server: 192.168.1.89 #nfs服務器地址
path: "/app/mysql1_data" #nfs共享的路徑