『高階篇』docker之kubernetes基礎叢集附在功能kube-proxy和kube-dns(36)
上次搭建了kubernetes最核心最基礎的服務,也學習了一些命令,現在咱們在這個之上proxy和dns,雖然這2個功能非常非常的重要,但是從技術層面他們屬於kubernetes的附加元件,可以有也可以沒有,如果需要service的功能可以新增kubernetes proxy,如果需要dns通過名字解析服務就需要增加kubernetes dns元件。非必須的功能做成元件的形式,而不是必須安裝的形式。這也說明了kubernetes的設計,儘量避免這種強依賴,首先就為叢集增加proxy的功能。原始碼:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter 基礎叢集的搭建檢視32節到34節
為叢集增加service功能 – kube-proxy(工作節點102,103)
簡介
每臺工作節點上都應該執行一個kube-proxy服務,它監聽API server中service和endpoint的變化情況,並通過iptables等來為服務配置負載均衡,是讓我們的服務在叢集外可以被訪問到的重要方式。
部署
通過系統服務方式部署:
#確保工作目錄存在 mkdir -p /var/lib/kube-proxy #複製kube-proxy服務配置檔案 cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/ #複製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 重點配置說明
kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
…
[Service]
#工作目錄
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/home/michael/bin/kube-proxy \
#監聽地址
–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,內容與kubelet雷同,不再贅述。
操練service
-
檢視service
>api的時候就建立的一個service,檢視型別是Type:ClusterIp,它有一個虛擬的Ip(10.68.0.1)相當於給apiservice做成了一個服務,一個是叢集內的其他元件,可以通過這個ip直接進行訪問,不需要依賴具體worker的ip地址了,負載均衡,apiserver的高可用,通過apiserver的ip來完成。上次訪問對應的deployment,都是啟動代理,然後另一個視窗通過curl的方式來進行訪問。
kubectl get services kubectl describe serivce kubernetes
-
deploy升級成為service
>感覺比較亂,命令去執行的2個埠target-port 和port ,在執行service的時候又出現了一個埠,
- 隨機的埠23492節點啟動的埠,可以通過埠訪問服務
- target-port 這個埠實際啟動的埠
- port 虛擬ip下需要訪問的埠
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80
- worker訪問
curl http://192.168.66.103:23492
-
進入容器內部訪問的話
>通過docker ps 找到容器id,進入容器exec -it 後
curl http://10.68.99.134:80
都是可以curl通的這是符合k8s的規範的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叢集提供命名服務,主要用來解析叢集服務名和Pod的hostname。目的是讓pod可以通過名字訪問到叢集內服務。它通過新增A記錄的方式實現名字和service的解析。普通的service會解析到service-ip。headless service會解析到pod列表。
部署
通過kubernetes應用的方式部署
kube-dns.yaml檔案基本與官方一致(除了映象名不同外)。
裡面配置了多個元件,之間使用”—“分隔
#到kubernetes-starter目錄執行命令 kubectl create -f target/services/kube-dns.yaml
在特定的名稱空間中
kubectl -n kube-system get svc
只要安裝了這個後,直接可以通過名稱訪問
說白了 只要執行dns服務,就可以直接用啦。
PS:基礎叢集的沒有經過認證授權,也就基本完成了,這些元件就是每個k8s公司所必須的,非常重要非常核心,整個叢集的搭建讓老鐵對k8s有個深入的瞭解,瞭解每個元件都是幹啥用的,讓老鐵覺得k8s沒有那麼複雜,通過上邊的安裝,確實沒有mesos和swarm那麼簡單,但是也沒有那麼複雜。一定要熟悉k8s的命令。下次瞭解下認證的授權。
ofollow,noindex" target="_blank" href="http://zhanzhang.baidu.com/sitesubmit/index?sitename=https://idig8.com/2018/11/13/gaojipiandockerzhikubernetesjichujiqunfuzaigongnengkube-proxyhekube-dns36/">百度未收錄
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章