vlambda博客
学习文章列表

helm 3.0 最简单使用测试安装nginx-ingress


1. 下载 helm 二进制安装包

[root@master01 ~]# wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz .


2. 解压

[root@master01 ~]# tar -zxf helm-v3.1.2-linux-amd64.tar.gz


3. 把解压目录中的二进制文件,移到到二进制目录

[root@master01 ~]# mv linux-amd64/helm /usr/local/bin/helm


4. helm 版本信息

[root@master01 ~]# helm version
version.BuildInfo{Version:"v3.1.2", GitCommit:"d878d4d45863e42fd5cff6743294a11d28a9abce", GitTreeState:"clean", GoVersion:"go1.13.8"}
[root@master01 ~]#


5. 查看帮助 

[root@master01 ~]# helm help


6. 添加远程repo

[root@master01 ~]# helm repo add stable https://kubernetes-charts.storage.googleapis.com


7. 查找远程仓库的ingress nginx版本信息

[root@master01 ~]# helm search repo stable/nginx-ingress --version 1.34.3


8. 下载别人写好的Chart (有些官方的charts不适合我们,我们需要稍微修改下)

[root@master01 ~]# helm pull stable/nginx-ingress --version 1.34.3


9. 如果不需要修改,可以直接安装

[root@master01 ~]# helm install repo stable/nginx-ingress --version 1.34.3


10. 如果不直接安装,可以进入到刚才下载charts包并解析的目录,自行修改values.yaml

[root@master01 ingressnginx]# ls
nginx-ingress nginx-ingress-1.34.3.tgz
[root@master01 ingressnginx]# cd nginx-ingress
[root@master01 nginx-ingress]# ls
Chart.yaml ci OWNERS README.md templates values.yaml
[root@master01 nginx-ingress]# pwd
/root/ingressnginx/nginx-ingress
[root@master01 nginx-ingress]#


11. 这里我们修改并创建opsvirhost.yaml(values.yaml),使用hostNetwork: true,通过nodeSelector指定节点,自定义一个ingressClass

controller:
  replicaCount: 2
  hostNetwork: true
  ingressClass: opsvirhost
  nodeSelector:
    node-role.kubernetes.io/edge: 'opsvirhost'
  affinity:
    podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - nginx-ingress
            - key: component
              operator: In
              values:
              - controller
          topologyKey: kubernetes.io/hostname
  tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule


defaultBackend:
  nodeSelector:
    node-role.kubernetes.io/edge: 'opsvirhost'
  tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule


12. 生成virhost.yaml文件,也方便你修改查看;

[root@master01 nginx-ingress]# helm template --namespace=kube-tool -f ./opsvirhost.yaml . > ./virhost.yml
[root@master01 nginx-ingress]# sed -i 's/RELEASE-NAME/opsvirhost/g' virhost.yml


13. 为节点打标签

[root@master01 nginx-ingress]# kubectl label nodes master01 node-role.kubernetes.io/edge=opsvirhost
node/master01 labeled
[root@master01 nginx-ingress]# kubectl label nodes node01 node-role.kubernetes.io/edge=opsvirhost
node/node01 labeled
[root@master01 nginx-ingress]#


14. 创建Ingress Pod

[root@master01 nginx-ingress]# kubectl apply -f virhost.yml -n kube-tool
poddisruptionbudget.policy/opsvirhost-nginx-ingress-controller created
serviceaccount/opsvirhost-nginx-ingress created
serviceaccount/opsvirhost-nginx-ingress-backend created
clusterrole.rbac.authorization.k8s.io/opsvirhost-nginx-ingress created
clusterrolebinding.rbac.authorization.k8s.io/opsvirhost-nginx-ingress created
role.rbac.authorization.k8s.io/opsvirhost-nginx-ingress created
rolebinding.rbac.authorization.k8s.io/opsvirhost-nginx-ingress created
service/opsvirhost-nginx-ingress-controller created
service/opsvirhost-nginx-ingress-default-backend created
deployment.apps/opsvirhost-nginx-ingress-controller created
deployment.apps/opsvirhost-nginx-ingress-default-backend created
[root@master01 nginx-ingress]#


15. 验证安装

[root@master01 ~]# kubectl get pods -n kube-tool
NAME READY STATUS RESTARTS AGE
opsvirhost-nginx-ingress-controller-84598b88f6-h8hmj 1/1     Running 0          5m6s
opsvirhost-nginx-ingress-controller-84598b88f6-zp9md 1/1     Running 0          5m6s
opsvirhost-nginx-ingress-default-backend-559b74cf45-4tm6t 1/1     Running 0          5m6s
[root@master01 ~]# netstat -antp |grep -E "80|443" |grep nginx
tcp 0      0 0.0.0.0:443             0.0.0.0:*               LISTEN 2621/nginx: master
tcp 0      0 0.0.0.0:80              0.0.0.0:*               LISTEN 2621/nginx: master
tcp 0      0 10.96.0.1:35426         10.96.0.1:443           ESTABLISHED 2560/nginx-ingress-
[root@master01 ~]# 因为我们部署了2个副本,并且指定了node,所以可以查看下;
[root@node01 ~]# netstat -antp |grep -E "80|443" |grep nginx
tcp 0      0 0.0.0.0:443             0.0.0.0:*               LISTEN 26656/nginx: master
tcp 0      0 0.0.0.0:80              0.0.0.0:*               LISTEN 26656/nginx: master
tcp 0      0 10.96.0.1:51152         10.96.0.1:443           ESTABLISHED 26592/nginx-ingress
[root@node01 ~]#


16. 测试demo

[root@master01 ingressnginx]# cat demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: default-deployment-nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: default-deployment-nginx
  template:
    metadata:
      labels:
        run: default-deployment-nginx
    spec:
      containers:
      - name: default-deployment-nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: default-svc-nginx
  namespace: default
spec:
  selector:
    run: default-deployment-nginx
  type: ClusterIP
  ports:
    - name: nginx-port
      port: 80
      targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: default-ingress-nginx
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "opsvirhost"
    nginx.ingress.kubernetes.io/proxy-body-size: 1000m
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: test.k8s.vip
    http:
      paths:
      - path: /
        backend:
          serviceName: default-svc-nginx
          servicePort: nginx-port
[root@master01 ingressnginx]#


17.  添加hosts并访问

helm 3.0 最简单使用测试安装nginx-ingress

    https://hub.helm.sh/charts


您的关注是我写作的动力


往期分享