原創(chuàng)文章,歡迎轉(zhuǎn)載甘桑。轉(zhuǎn)載請注明:轉(zhuǎn)載自IT人故事會拍皮,謝謝!
原文鏈接地址:『高級篇』docker之kubernetes基礎(chǔ)集群附在功能kube-proxy和kube-dns(36)
上次搭建了kubernetes最核心最基礎(chǔ)的服務(wù)跑杭,也學(xué)習(xí)了一些命令铆帽,現(xiàn)在咱們在這個之上proxy和dns,雖然這2個功能非常非常的重要德谅,但是從技術(shù)層面他們屬于kubernetes的附加組件爹橱,可以有也可以沒有,如果需要service的功能可以添加kubernetes proxy女阀,如果需要dns通過名字解析服務(wù)就需要增加kubernetes dns組件。非必須的功能做成組件的形式屑迂,而不是必須安裝的形式浸策。這也說明了kubernetes的設(shè)計(jì),盡量避免這種強(qiáng)依賴惹盼,首先就為集群增加proxy的功能庸汗。源碼:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter 基礎(chǔ)集群的搭建查看32節(jié)到34節(jié)
為集群增加service功能 - kube-proxy(工作節(jié)點(diǎn)102,103)
簡介
每臺工作節(jié)點(diǎn)上都應(yīng)該運(yùn)行一個kube-proxy服務(wù),它監(jiān)聽API server中service和endpoint的變化情況手报,并通過iptables等來為服務(wù)配置負(fù)載均衡蚯舱,是讓我們的服務(wù)在集群外可以被訪問到的重要方式。
部署
通過系統(tǒng)服務(wù)方式部署:
#確保工作目錄存在
mkdir -p /var/lib/kube-proxy
#復(fù)制kube-proxy服務(wù)配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
#復(fù)制kube-proxy依賴的配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/
systemctl enable kube-proxy.service
service kube-proxy start
journalctl -f -u kube-proxy
9.3 重點(diǎn)配置說明
kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
...
[Service]
#工作目錄
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/home/michael/bin/kube-proxy \
#監(jiān)聽地址
--bind-address=192.168.1.103 \
#依賴的配置文件掩蛤,描述了kube-proxy如何訪問api-server
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
...
102的kube-proxy
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
--bind-address=192.168.66.102 \
--hostname-override=192.168.66.102 \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--logtostderr=true \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
103的kube-proxy
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
--bind-address=192.168.66.103 \
--hostname-override=192.168.66.103 \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--logtostderr=true \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
kube-proxy.kubeconfig
配置了kube-proxy如何訪問api-server枉昏,內(nèi)容與kubelet雷同,不再贅述揍鸟。
操練service
- 查看service
api的時候就建立的一個service兄裂,查看類型是Type:ClusterIp,它有一個虛擬的Ip(10.68.0.1)相當(dāng)于給apiservice做成了一個服務(wù)阳藻,一個是集群內(nèi)的其他組件晰奖,可以通過這個ip直接進(jìn)行訪問,不需要依賴具體worker的ip地址了腥泥,負(fù)載均衡匾南,apiserver的高可用,通過apiserver的ip來完成蛔外。上次訪問對應(yīng)的deployment蛆楞,都是啟動代理溯乒,然后另一個窗口通過curl的方式來進(jìn)行訪問。
kubectl get services
kubectl describe serivce kubernetes
- deploy升級成為service
感覺比較亂臊岸,命令去執(zhí)行的2個端口target-port 和port 橙数,在執(zhí)行service的時候又出現(xiàn)了一個端口,
- 隨機(jī)的端口23492節(jié)點(diǎn)啟動的端口帅戒,可以通過端口訪問服務(wù)
- target-port 這個端口實(shí)際啟動的端口
- port 虛擬ip下需要訪問的端口
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80
- worker訪問
curl http://192.168.66.103:23492
- 進(jìn)入容器內(nèi)部訪問的話
通過docker ps 找到容器id灯帮,進(jìn)入容器exec -it 后
curl http://10.68.99.134:80
都是可以curl通的這是符合k8s的規(guī)范的pod之間是互通的。
- 通過yaml文件將pod生成services
vi nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 8080
targetPort: 80
nodePort: 20000
selector:
app: nginx
type: NodePort
為集群增加dns功能 - kube-dns(app)
簡介
kube-dns為Kubernetes集群提供命名服務(wù)逻住,主要用來解析集群服務(wù)名和Pod的hostname钟哥。目的是讓pod可以通過名字訪問到集群內(nèi)服務(wù)。它通過添加A記錄的方式實(shí)現(xiàn)名字和service的解析瞎访。普通的service會解析到service-ip腻贰。headless service會解析到pod列表。
部署
通過kubernetes應(yīng)用的方式部署
kube-dns.yaml文件基本與官方一致(除了鏡像名不同外)扒秸。
里面配置了多個組件播演,之間使用”---“分隔
#到kubernetes-starter目錄執(zhí)行命令
kubectl create -f target/services/kube-dns.yaml
在特定的命名空間中
kubectl -n kube-system get svc
只要安裝了這個后,直接可以通過名稱訪問
說白了 只要運(yùn)行dns服務(wù)伴奥,就可以直接用啦写烤。
PS:基礎(chǔ)集群的沒有經(jīng)過認(rèn)證授權(quán),也就基本完成了拾徙,這些組件就是每個k8s公司所必須的洲炊,非常重要非常核心,整個集群的搭建讓老鐵對k8s有個深入的了解尼啡,了解每個組件都是干啥用的暂衡,讓老鐵覺得k8s沒有那么復(fù)雜,通過上邊的安裝崖瞭,確實(shí)沒有mesos和swarm那么簡單狂巢,但是也沒有那么復(fù)雜。一定要熟悉k8s的命令书聚。下次了解下認(rèn)證的授權(quán)隧膘。