1. pod
Pod是一組緊密關(guān)聯(lián)的容器集合殃恒,它們共享PID、IPC辱揭、Network和UTS namespace离唐,是Kubernetes調(diào)度的基本單位。Pod的設(shè)計(jì)理念是支持多個(gè)容器在一個(gè)Pod中共享網(wǎng)絡(luò)和文件系統(tǒng)问窃,可以通過(guò)進(jìn)程間通信和文件共享這種簡(jiǎn)單高效的方式組合完成服務(wù).
1.1 創(chuàng)建pod
# vim http.yaml
apiVersion: v1
kind: Pod
metadata:
? name: demo
spec:
? containers:
? - image: httpd
? ? name: httpd
? ? imagePullPolicy: Always
# kubectl create -f pod.yaml
1.2 查看pod
# kubectl get pods
#?kubectl describe pods
1.3 刪除pod
#?kubectl delete pod <pod-name>
2.?Replicaset
Replicaset在繼承Pod的所有特性的同時(shí), 它可以利用預(yù)先創(chuàng)建好的模板定義副本數(shù)量并自動(dòng)控制, 通過(guò)改變Pod副本數(shù)量實(shí)現(xiàn)Pod的擴(kuò)容和縮容.
2.1?創(chuàng)建Replicaset
# vi replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
? name: demo-rc
? labels:
? ? app: demo-rc
spec:
? replicas: 2
? selector:
? ? matchLabels:
? ? ? app: demo-rc
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: demo-rc
? ? spec:
? ? ? containers:
? ? ? - name: httpd
? ? ? ? image: httpd
? ? ? ? imagePullPolicy: Always
...
3.?Deployment
Deployment在繼承Pod和Replicaset的所有特性的同時(shí), 它可以實(shí)現(xiàn)對(duì)template模板進(jìn)行實(shí)時(shí)滾動(dòng)更新并具備我們線上的Application lifecycle的特性.
3.1 create
apiVersion: apps/v1
kind: Deployment
metadata:
? name: httpd-deployment
? labels:
? ? app: httpd-deployment
spec:
? replicas: 2
? selector:
? ? matchLabels:
? ? ? app: httpd-demo
? template:
? ? metadata:
? ? ? labels:
? ? ? ? app: httpd-demo
? ? spec:
? ? ? containers:
? ? ? - name: httpd
? ? ? ? image: httpd
? ? ? ? imagePullPolicy: Always
? ? ? ? ports:
? ? ? ? - containerPort: 80
? ? ? ? env:
? ? ? ? - name: VERSION
? ? ? ? ? value: "v1"
...
3.5?更新deployment
# kubectl edit -f deployment.yaml
通過(guò)此命令使當(dāng)前編輯結(jié)果生效.
# kubectl apply -f deployment.yaml
3.6?擴(kuò)容與縮容
可以修改replicas的賦值對(duì)deployment進(jìn)行擴(kuò)容與縮容
#??kubectl scale deployment/httpd-deployment --replicas=1
4.?Label
Label是attach到Pod的一對(duì)鍵/值對(duì)亥鬓,用來(lái)傳遞用戶定義的屬性。比如泡躯,你可能創(chuàng)建了一個(gè)"tier"和“app”標(biāo)簽贮竟,通過(guò)Label(tier=frontend, app=myapp)來(lái)標(biāo)記前端Pod容器,使用Label(tier=backend, app=myapp)標(biāo)記后臺(tái)Pod较剃。然后可以使用Selectors選擇帶有特定Label的Pod咕别,讓具體某一個(gè)Pod或者Deployment去使用某一個(gè)Service實(shí)現(xiàn)特定的網(wǎng)絡(luò)配置.
5.?Service
Service是應(yīng)用服務(wù)的抽象,通過(guò)labels為應(yīng)用提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)写穴。匹配labels的Pod IP和端口列表組成endpoints惰拱,由kube-proxy負(fù)責(zé)將服務(wù)IP負(fù)載均衡到這些endpoints上。
每個(gè)Service都會(huì)自動(dòng)分配一個(gè)cluster IP(僅在集群內(nèi)部可訪問(wèn)的虛擬地址)和DNS名啊送,其他容器可以通過(guò)該地址或DNS來(lái)訪問(wèn)服務(wù)偿短,而不需要了解后端容器的運(yùn)行欣孤。
5.1?更改NodePort限制
Kubernetes默認(rèn)對(duì)外的NodePort限制范圍為30000-32767, 這里如果要使用一些常用的端口(80, 8080, 443)需將這個(gè)范圍放大.
#?vi /etc/kubernetes/manifests/kube-apiserver.yaml
在--service-cluster-ip-range與insecure-port間添加如下node port配置
- --service-cluster-ip-range=10.96.0.0/12
- --service-node-port-range=0-32767
- --insecure-port=0
重啟服務(wù)
# systemctl restart kubelet
5.2 創(chuàng)建service
# vi svc.yaml
apiVersion: v1
kind: Service
metadata:
? name: demo
spec:
? type: NodePort
? ports:
? ? - port: 80
? ? ? nodePort: 30050
? selector:
? ? app: httpd-demo
# kubectl create -f svc.yaml
其中,port是pod提供的端口號(hào)昔逗,所有符合selector要求的pod提供的端口號(hào)都是80.
而nodeport是service對(duì)外提供服務(wù)所暴露的端口號(hào)降传。
5.3 查看service?
# kubectl get svc demo
NAME? ? TYPE? ? ? ? CLUSTER-IP? ? ? ? ? ? EXTERNAL-IP? PORT(S)? ? ? ? ? AGE
demo? ? ? NodePort? 10.100.57.243? ? ? ? ? <none>? ? ? ? ? ? ?80:30050/TCP? 28m
# kubectl describe svc demo
Name: demo
Namespace:? ? ? ? ? ? ? ? default
Labels:? ? ? ? ? ? ? ? ?
Annotations:? ? ? ? ? ? ?
Selector:? ? ? ? ? ? ? ? app=httpd-demo
Type:? ? ? ? ? ? ? ? ? ? NodePort
IP:? ? ? ? ? ? ? ? ? ? ? 10.100.57.243
Port:? ? ? ? ? ? ? ? ? ? ? 80/TCP
TargetPort:? ? ? ? ? ? ? 80/TCP
NodePort:? ? ? ? ? ? ? ? ? 30050/TCP
Endpoints:? ? ? ? ? ? ? ? 10.244.0.3:80,10.244.1.5:80
Session Affinity:? ? ? ? None
External Traffic Policy:? Cluster
Events:? ? ? ? ? ? ? ? ?<none>
# kubectl get pod -o wide
NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? ? STATUS? ? RESTARTS? AGE? ? ? IP? ? ? ? ? NODE
demo? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? ? Running? 0? ? ? ? ? 53m? ? ? 10.244.1.4? minion
httpd-deployment-5b749686c9-cfbkc? 1/1? ? ? Running? 0? ? ? ? ? 8m? ? ? ? 10.244.1.5? minion
httpd-deployment-5b749686c9-qjw7r? 1/1? ? ? Running? 0? ? ? ? ? 8m? ? ? ? 10.244.0.3? master
source-ip-app-8687dbf9f-kzb6h? ? ? 1/1? ? ? Running? 0? ? ? ? ? 58m? ? ? 10.244.1.3?
可以看到,service中的selector信息為app: httpd-demo勾怒。create service的時(shí)候婆排,會(huì)根據(jù)selector信息去匹配符合的pod,所有符合匹配的pod都會(huì)提供80端口笔链,通過(guò)service demo向外提供服務(wù)段只,統(tǒng)一以ip?10.100.57.243暴露30050端口。
可以通過(guò)# curl?10.100.57.243 訪問(wèn)到service鉴扫。