1. 如何在K8S平台部署微服務
使用Rancher來運行Kubernetes有很多優勢。大多數情況下能使用戶和IT團隊部署和管理工作更加方便。Rancher自動在Kubernetes後端實現etcd 的HA,並且將所需要的服務部署到此環境下的任何主機中。在設置訪問控制,可以輕易連接到現有的LDAP和AD基礎構架。Rancher還可以自動實現容器聯網以及為Kubernetes提供負載均衡服務。通過使用Rancher,你將會在幾分鍾內有擁有Kubernetes的HA實現。
命名空間
現在我們的集群已經運行了,讓我們進入並查看一些基本的Kubernetes資源吧。你可以訪問Kubernetes集群也可以直接通過kubectl CLI訪問,或者通過Rancher UI 訪問。Rancher的訪問管理圖層控制可以訪問集群,所以你需要在訪問CLI前從Rancher UI那裡生成API密匙。
我們來看下第一個Kubernetes資源命名空間,在給定的命名空間中,所有資源名稱必須有唯一性。此外,標簽是用來連接劃定到單個命名空間的資源。這就是為什麼同一個Kubernetes集群上可以用命名空間來隔離環境。例如,你想為應用程序創建Alpha, Beta和生產環境,以便可以測試最新的更改且不會影響到真正的用戶。最後創建命名空間,復制下面的文本到namespace.yaml文件,並且運行 kubectl -f namespace.yaml 命令,來創建一個beta命名空間。
kind: Namespace
apiVersion: v1
metadata:
name: beta
labels:
name: beta
當然你還可以使用頂部的命名空間菜單欄從Rancher UI上創建、查看和選擇命名空間。
你可以使用下面的命令,用kubectl來為CLI交互設置命名空間:
$ kubectl config set-context Kubernetes --namespace=beta.
為了驗證目前context是否已經被設置好,你可以使用config view命令,驗證一下輸出的命名空間是否滿足你的期望。
$ kubectl config view | grep namespace command namespace: beta
Pods
現在我們已經定義好了命名空間,接下來開始創建資源。首先我們要看的資源是Pod。一組一個或者多個容器的Kubernetes稱為pod,容器在pod 里按組來部署、啟動、停止、和復制。在給定的每個主機種類里,只能有一個Pod,所有pod里的容器只能在同一個主機上運行,pods可以共享網路命名空間,通過本地主機域來連接。Pods也是基本的擴展單元,不能跨越主機,因此理想狀況是使它們盡可能接近單個工作負載。這將消除pod在擴展或縮小時產生的副作用,以及確保我們創建pods不太耗資源而影響到主機。
我們來給名為mywebservice的pod定義,在規范命名web-1-10中它有一個容器並使用nginx容器鏡像,然後把埠為80下的文本添加至pod.yaml文檔中。
apiVersion: v1
kind: Pod
metadata:
name: mywebservice
spec:
containers:
- name: web-1-10
image: nginx:1.10
ports:
- containerPort: 80
使用kubetl create命令創建pod,如果您使用set-context command設置了您的命名空間,pods將會在指定命名空間中被創立。在通過運行pods命令去驗證pod狀態。完成以後,我們可以通過運行kubetl delete命令刪除pod。
$ kubectl create -f ./pod.yaml
pod "mywebservice" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mywebservice 1/1 Running 0 37s
$ kubectl delete -f pod.yaml
pod "mywebservice" deleted
在Rancher UI 中查看pod,通過頂端的菜單欄選擇 Kubernetes > Pods 。
2. kubernetes ingress nginx 怎麼配置多域名
空間可以綁定多個域名,您可到主機控制面板中綁定其他域名(同時請將域名A記錄解析到空間IP地址上)。。
3. 如何訪問k8s集群內部署的mysql服務
雖然 kubernetes 社區一直在努力使得有狀態應用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩定的域名訪問和存儲訪問。但鑒於 MySQL 部署運維的多樣性和復雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰。
1、業務流量入口的配置方式
傳統虛擬機環境下,我們通過虛IP的方式,讓業務應用都配置事先定義的一個虛IP為鏈接資料庫的地址,然後由高可用服務保證虛IP始終能被路由到master資料庫。在kubernetes中,出現了一層網路插件屏蔽了底層網路拓撲,高可用服務管理虛IP的方式需要隨之適應調整,比如通過service結合標簽完成虛IP的漂移,但service本身是kubernetes提供的一項功能,其可靠性和性能都取決於kubernetes服務的穩定。以性能來說,service是kubeproxy組件通過配置iptables實現的,當iptables規則較多時不可避免的會產生時延,需要我們針對性的解決。
2、容器隔離帶來的監控視野問題
在 kubernetes 中,如果將 MySQL 製作為 container 運行在一個 pod 中,container 會將 MySQL 進程和運行環境隔離在一個單獨的 namespace 中。監控組件在獲取 MySQL 的一些 metirc 時,可能不得不進入與 MySQL 同一個 namespace 中,在部署和設計監控組件時需要考慮到這些限制。
3、存儲在 kubernetes 中,支持配置各種不同的存儲。
如果使用本地存儲 local persistent volume,則需要綁定 MySQL 在一個固定的節點,這就完全浪費了 kubernetes 靈活調度的天然優勢;而如果使用遠程共享存儲,確實是將 MySQL 進程與其存儲完全解耦,使得 MySQL 進程可以在任意節點調度,然而考慮到高 I/O 吞吐量的情況,就不是那麼美好了。設計時需要考量遠程存儲是否能夠滿足 MySQL 的帶寬要求。
4、高可用/備份恢復
kubernetes 提供的 statefulset 控制器只能提供最基本的部署,刪除功能,無法實現完善的 MySQL 集群高可用/備份恢復操作。對於有狀態應用的部署,仍需要定製開發,所以多數公司提供了定製的 operator 來完成應用容器的管理。比如 etcd operator,MySQL operator,後文將為大家詳述我測試使用 MySQL operator 的一些記錄。
4. k8s中創建ingress address 為什麼是空
如果保證自己的集群環境沒問題的話,分兩種情況:
1、集群是用kubeadm自己搭建的,目前kubeadm這種集群搭建的有些能力還不匹配,先檢查自己的service是否有external-ip,如果沒有需要手動配置一個;然後這時候重新部署ingress應該就有ip了。
2、如果是雲平台託管的集群,最好提工單,由雲平台的技術人員幫忙排查。
謝謝,希望能幫到你。
5. k8s配置雙向認證後怎麼訪問api
雙向認證的概述 傳統的單項認證可以讓客戶端對於伺服器的身份進行鑒別,一旦認證通過用戶就可以通過用戶名和密碼這種表單或其他認證形式通過伺服器端的認證。如果用戶的登錄賬戶信息被泄露了,那麼伺服器端對此便無能為力了。
6. k8s ingress會不會對出口網路
會,如果保證自己的集群環境沒問題的話,分兩種情況:
1、集群是用kubeadm自己搭建的,目前kubeadm這種集群搭建的有些能力還不匹配,先檢查自己的service是否有external-ip,如果沒有需要手動配置一個;然後這時候重新部署ingress應該就有ip了。
2、如果是雲平台託管的集群,最好提工單,由雲平台的技術人員幫忙排查。
謝謝,希望能幫到你。
7. 如何安裝k8s ingress https
自己看說明書
8. 如何安裝k8s ingress
一、暴露給Kubernetes集群內部的其他容器,提供Service IP來訪問
創建Service對象即可得到Service IP
二、暴露給Kubernetes集群內部的其他容器,提供Service名稱來訪問
需安裝kube-dns組件,再創建Service對象
二、暴露到Kubernetes集群外部
需安裝nginx-ingress-controller組件,再創建Service對象,再創建Ingress對象。
希望能幫到你,!
9. kubernetes集群怎麼訪問外部的服務mysql,redis
k8s訪問集群外獨立的服務最好的方式是採用Endpoint方式(可以看作是將k8s集群之外的服務抽象為內部服務),以mysql服務為例:
創建mysql-endpoints.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: mysql-test
namespace: default
subsets:
- addresses: - ip: 10.1.0.32 ports:
- port: 3306多個埠的話可以在此處列出123456789101112
創建mysql-service.yaml
apiVersion: v1kind: Servicemetadata:
name: mysql-testspec:
ports:
- port: 3306同樣多埠需要列出
10. k8s中創建k8s ingress address 為什麼是空
yaml 本身不用安裝,它只是一種文本標記格式而已。 你可能需要考慮安裝的東西是編輯器的插件 (如果編輯器默認還不支持yaml格式的高亮), 或者是某種編程語言對yaml的綁定,比如 python 有了 PyYAML 後就可以處理 yaml文件了。 更多細節可以網上找找yaml的介紹,中英文都有很多。