1. 程式人生 > 其它 >|NO.Z.00163|——————————|^^ 部署 ^^|——|KuberNetes&服務釋出.V14|-------------------------------------------------------|ingress.v02|ingress部署.V01|部署helm|

|NO.Z.00163|——————————|^^ 部署 ^^|——|KuberNetes&服務釋出.V14|-------------------------------------------------------|ingress.v02|ingress部署.V01|部署helm|



[CloudNative:KuberNetes&服務釋出.V14]                                                               [Applications.KuberNetes] [|DevOps|k8s|服務釋出|什麼是Ingress|使用helm安裝ingress|Ingress簡單使用|Ingress多級域名使用|]








一、Ingress安裝使用
### --- Ingress安裝使用

~~~     # 首先安裝helm管理工具:
~~~     https://helm.sh/docs/intro/install/
~~~     # 使用helm安裝ingress:
~~~     https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
二、安裝helm並新增ingress的helm倉庫
### --- 安裝helm的客戶端工具到k8s叢集中:https://helm.sh/docs/intro/install/ 
~~~     下載helm二進位制程式包:

[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz
[root@k8s-master01 ~]# tar -zxvf helm-v3.5.4-linux-amd64.tar.gz 
[root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin/helm
[root@k8s-master01 ~]# helm version
version.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"clean", GoVersion:"go1.15.11"}
### --- 新增ingress的helm倉庫(課程講解的版本已經上傳至百度網盤)

[root@k8s-master01 ~]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
### --- 檢視已經有的helm的倉庫

[root@k8s-master01 ~]# helm repo list           
NAME            URL                                       
ingress-nginx   https://kubernetes.github.io/ingress-nginx
### --- 下載ingress的版本包
### --- 下載ingress的helm包至本地
~~~     檢視當前helm下Ingress的版本,建議使用040.2以上的版本;因為0.35在k8s1.9是不太好用的。

[root@k8s-master01 ~]# helm search repo ingress-nginx               
NAME                        CHART VERSION   APP VERSION DESCRIPTION                                       
ingress-nginx/ingress-nginx 3.29.0          0.45.0      Ingress controller for Kubernetes using NGINX a...
### --- 第一個ingress-nginx是倉庫的名稱,第二個ingress-nginx是helm的包名 

[root@k8s-master01 ~]# helm pull ingress-nginx/ingress-nginx
### --- 更改對應的配置

[root@k8s-master01 ~]# tar -zxvf ingress-nginx-3.6.0.tgz 

三、修改ingress版本包配置引數
### --- 需要修改的位置

[root@k8s-master01 ~]# cd ingress-nginx
### --- helm的配置檔案

[root@k8s-master01 ingress-nginx]# vim values.yaml  
controller:
  image:
    repository: registry.cn-beijing.aliyuncs.com/dotbalo/controller # 定義為阿里雲的映象倉庫
    tag: "v0.40.2"
    #digest: sha256:46ba23c3fbaafd9e5bd01ea85b2f921d9f2217be082580edc22e6c704a83f02f        //雜湊值給去掉
#******省略部分內容**********    
  hostNetwork: true                                 # 部署ingress的方式推薦使用hostNetwork去部署,hostNetwork是直接使用宿主機的埠號,這樣它的效能可能會好一點。
#******省略部分內容**********
  dnsPolicy: ClusterFirstWithHostNet                # 若是使用hostNetwork的話dns策略是需要更改為ClusterFirstWithHostNet。不然k8s的pod是解析不了k8s內部的service,所以一定要設定成這個
#******省略部分內容**********  
  kind: DaemonSet                                   # 使用DaemonSet去部署,使用deployment也是可以的,但是使用DaemonSet更受控制,我們可以固定到某個節點上面。這樣就可以直接在宿主機上暴露一個埠號,這樣k8s外部的叢集就可以直接代理到Ingress上面。若是使用Deployment的話,可能需要deploymentservice可能暴露一個notepad,這樣效能可能不是很好,推薦使用DaemonSet去部署,DaemonSet在去部署ingress的pod,暴露它的80和443埠,然後在外部的service代理到這個ingress所在的節點上的IP地址和埠號就可以。
  nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"                                 # 我們不是所有節點上都不熟ingress,只有ingress為true這個標籤的部署,沒有就不用去部署了。
#******省略部分內容**********
  resources:                                        # 這個位置是沒有更改的,若是在生產環境下建議限制一下,若是專有節點的話,可以不用去限制。它可以佔用整個宿主機的資源。這個資源給的大一點,應為它是k8s的入口,佔用的資源還是比較多的。
  #  limits:
  #    cpu: 100m
  #    memory: 90Mi
    requests:
      cpu: 100m
      memory: 90Mi  
#******省略部分內容**********      
    type: ClusterIP                                 # 這邊不使用LoadBalancer;LoadBalancer是在雲環境中會使用到,若是在我們的機房,就不適用LoadBalancer,因為我們是通過Clusetnetwork去部署的,我們直接通過宿主機IP+埠號就可以訪問到資源,所以不使用LoadBalancer;若是雲環境的話就需要配置。     
#******省略部分內容**********    
  admissionWebhooks:                                # 是准入控制;若是你的版本過低的話,比如你的版本是0.35的,這個enabled是不能設定為true的,設定為true的話,部署ingress會報錯,報錯你的證書版本不正確,但是在0.40之後是不會報錯的。
    annotations: {}
    enabled: true
    failurePolicy: Fail
    # timeoutSeconds: 10
    port: 8443
    certificate: "/usr/local/certificates/cert"
    key: "/usr/local/certificates/key"
    namespaceSelector: {}
    objectSelector: {}   
#******省略部分內容**********
    patch:
      enabled: true
      image:
        repository: registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
        tag: v1.3.0
        pullPolicy: IfNotPresent
### --- 註釋詳解

~~~     Controller和admissionWebhook的映象地址,
~~~     需要將公網映象同步至公司內網映象倉庫(和課程不一致的版本,
~~~     需要自行同步gcr映象的,可以百度查一下使用阿里雲同步gcr的映象,也可以參考這個連線
~~~     https://blog.csdn.net/weixin_39961559/article/details/80739352,
~~~     或者參考這個連線: 
~~~     https://blog.csdn.net/sinat_35543900/article/details/103290782)
~~~     hostNetwork設定為true
~~~     dnsPolicy設定為 ClusterFirstWithHostNet
~~~     NodeSelector新增ingress: "true"部署至指定節點
~~~     型別更改為kind: DaemonSet
五、部署ingress
### --- 建立namespace
~~~     部署ingress:給需要部署ingress的節點上打標籤;建議Ingress部署在我們建立的namespace上

[root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx
namespace/ingress-nginx created
[root@k8s-master01 ingress-nginx]# kubectl get ns
ingress-nginx          Active   11s
### --- 為需要部署的宿主機打標籤

[root@k8s-master01 ingress-nginx]# kubectl label node k8s-master03 ingress=true     //我們在k8s-master03上去部署Ingress,給master03打個label,因為在生產環境下並不是每個節點上都需要部署Ingress的,需要指定節點,哎Ingress的配置檔案中匹配這個標籤就可以了
node/k8s-master03 labeled   
### --- 安裝ingress-nginx
~~~     提示資訊可以使用這個例子去建立一個Ingress

[root@k8s-master01 ingress-nginx]# helm install ingress-nginx -n ingress-nginx .
apiVersion: networking.k8s.io/v1beta1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    rules:
      - host: www.example.com
        http:
          paths:
            - backend:
                serviceName: exampleService
                servicePort: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
        - hosts:
            - www.example.com
          secretName: example-tls
### --- 檢視建立的ingress
~~~     這個pod正在建立過程中,建立完成

[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx          
NAME                             READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-cxtgg   0/1     Running   0          2m9s








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)