helm什么helm官网Helm

helmkubernetes的包管理器,包管理器类似我们ubuntu使用aptcentos中的yum一样,能够快速查找和下载资源包,helm客户端组件helm服务组件tiller组成,能够将一组众多分散的k8s资源打包统一管理,是查找共享使用kubernets构建软件的最佳方式

部署helm】

https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz

通过kubeeasy部署工具一键部署,或是将helm可以执行二进制文件放入/usr/bin并给予执行权限,或是编译安装

配置helm部署服务所需环境

进入helm官网查找ingressnginx控制器

搜寻ingressnginx控制

根据自己的k8s版本进行选择。进入可以查看自己的k8s版本是否适配这里使用的试kubeeasy工具部署的1.22.1的版本,1.18以上的版本基本适用,containerd底层容器除外,这里docker底。

这里使用第一个(其实就是跟kubenetes官网用的镜像一样),然后添加helm仓库更新

[root@k8s-master-node1 ~]# helm repo list
NAME            URL
nginx-ing       https://kubernetes.github.io/ingress-nginx
[root@k8s-master-node1 ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "nginx-ing" chart repository
Update Complete. ⎈Happy Helming!⎈

【部署ingressnginx控制器】

helm配置完成后可以开始部署控制器

这里search一下看看有那些版本

[root@k8s-master-node1 ~]# helm search repo
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
nginx-ing/ingress-nginx 4.4.0           1.5.1           Ingress controller for Kubernetes using NGINX a...
[root@k8s-master-node1 ~]# helm install nginx-ing nginx-ing/ingress-nginx --version 4.4.0

这里有个很难搞的问题这里拉取镜像国外镜像,所以这里需要镜像无法拉取这里我用解决方案github+阿里利用国外镜像构建自己的镜像(实际上是同一个镜像只是重新构建了一遍),将镜像从阿里pull本地tag给镜像打上需要标签

这里启动一遍后describe查看一直在peding中的控制器,发现需要两个镜像,而且光是把镜像拉到本地更改标签是远远不够的,尽管将标签设置的一直仍然无法拉取镜像。后来发现镜像后面有一长串的附加的内容。而标签无法设置

sha@~后面的内容无法设置

然后一直导致我无法拉取镜像。

这里直接helm pull目标仓库的包直接拉取至本地。更改values文件values用于填充chart中其他yaml的内容,直接搜索所有的image,将带有sha@所有内容注释掉。

#先添加别人的仓库文件。
[root@k8s-master-node1 git]# helm repo list
NAME    URL
ooo     https://kubernetes.github.io/ingress-nginx
[root@k8s-master-node1 git]# helm search repo
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
ooo/ingress-nginx       4.4.0           1.5.1           Ingress controller for Kubernetes using NGINX a...
[root@k8s-master-node1 git]# helm pull ooo/ingress-nginx
#将软件包pull至本地,然后软件包解压修改chart包内容,将values文件(用于生成源文件信息。)
#修改镜像标签仓库。
[root@k8s-master-node1 docker]# tar -zxvf ingress-nginx-4.4.0.tgz
[root@k8s-master-node1 docker]# cd ingress-nginx
[root@k8s-master-node1 ingress-nginx]# vim values.yaml
    #digest: sha256:4ba73c697770664c1e00e9f968de14e08f606ff961c76e5d7033a4a9c593c629
    #digestChroot: sha256:c1c091b88a6c936a83bd7b098662760a87868d12452529bad0d178fb36147345
#注释掉此处,然后最后确认一遍所需镜像是否都有。

没有的镜像从阿里构建海外镜像,拉取到本地,tag标签

#确认无误后直接开始部署即可。
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg  docker  ingress-nginx-4.4.0.tgz  mychart
[root@k8s-master-node1 ~]# helm install zzz mychart/
……
[root@k8s-master-node1 ~]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                 APP VERSION
zzz     default         1               2022-12-02 17:24:58.359675018 +0800 CST deployed        ingress-nginx-4.4.0   1.5.1
[root@k8s-master-node1 ~]# kubectl get pod 
NAME                              READY   STATUS    RESTARTS   AGE
zzz-ingress-nginx-controller-554c89857b-7kf7r   1/1     Running   0          30s

发现服务全部启动完毕。

测试ingress-nginx控制器】

查看service是否暴露ingress-nginx控制器

[root@k8s-master-node1 ~]# kubectl get service
NAME                                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)AGE
kubernetes                               ClusterIP      10.96.0.1      <none>       443/TCP  91m
zzz-ingress-nginx-controller             LoadBalancer   10.96.47.177   <pending>     80:8436/TCP,443:48276/TCP    16m
zzz-ingress-nginx-controller-admission   ClusterIP      10.96.19.21    <none>       443/TCP 16m

然后发现zzz-ingress-nginx-controller一直处于pending状态。这是因为helm默认部署是以LoadBalancer方式。这需要厂商提供的平台支持,现在这里无法时候,可以自己创建service来进行测试

这里先将默认的LoadBalancer删除,自行编写yaml文件连接ingress-nginx控制器。

[root@k8s-master-node1 ~]# vim server-out.yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-out
  annotations:
    meta.helm.sh/release-name: zzz
    meta.helm.sh/release-namespace: default
spec:
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: zzz
    app.kubernetes.io/name: ingress-nginx
  type: NodePort
  ports:
  - name: http
    port: 80
    nodePort: 30800
  - name: https
    port: 443
    nodePort: 30443

这里nodePort暴露服务查看,是否可以连接到ingress-nginx控制器。

查看创建结果,这里describe看deployment控制器可以知道控制器标签注解然后发现endpointsservice存在即可

[root@k8s-master-node1 ~]# kubectl get service
NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-out                              NodePort    10.96.187.67   <none>        80:30800/TCP,443:30443/TCP   8m6s
kubernetes                               ClusterIP   10.96.0.1      <none>        443/TCP                      103m
zzz-ingress-nginx-controller-admission   ClusterIP   10.96.19.21    <none>        443/TCP                      28m
[root@k8s-master-node1 ~]# kubectl get endpoints
NAME                                     ENDPOINTS                        AGE
ingress-out                              10.244.1.15:443,10.244.1.15:80   8m7s
kubernetes                               192.168.100.10:6443              103m
zzz-ingress-nginx-controller-admission   10.244.1.15:8443                 28m

发现ingress-out已经再暴露服务,然后访问测试。发现可以访问到nginx,因为还没有后端的应用,所以还是主页状态

worker节点打上标签,方便调度,根据自己的部署方式来搞。

[root@k8s-master-node1 ~]# kubectl get node
NAME               STATUS   ROLES                         AGE    VERSION
k8s-master-node1   Ready    control-plane,master,worker   111m   v1.22.1
k8s-worker-node1   Ready    worker                        111m   v1.22.1
[root@k8s-master-node1 ~]# kubectl label node k8s-worker-node1 node=node1
node/k8s-worker-node1 labeled
#这里给其中一个节点打上标签,方便我后面限制调度节点,因为我volume的方式嫌麻烦,
#所以用了最简单hostPath,当然想搞pvc可不是不行。

然后开始编写一个deploy模拟后端的应用

[root@k8s-master-node1 ~]# kubectl apply -f backend.yaml
deployment.apps/backend created
[root@k8s-master-node1 ~]# cat backend.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: back
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      name: backend-qwe
      labels:
        app: back
    spec:
      nodeSelector:
        node: node1
      containers:
      - name: backend-container
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: back-vol
          mountPath: /usr/share/nginx/html
      volumes:
      - name: back-vol
        hostPath:
          path: /ttt
---
#这里顺便把内部service也给部署了
apiVersion: v1
kind: Service
metadata:
  name: back-service
spec:
  selector:
    app: back
  ports:
  - port: 222
    protocol: TCP
    targetPort: 80
[root@k8s-master-node1 ~]# kubectl apply -f backend.yaml
deployment.apps/backend unchanged
service/back-service unchanged
[root@k8s-master-node1 ~]# kubectl get deployments
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
backend                        1/1     1            1           3m11s
zzz-ingress-nginx-controller   1/1     1            1           44m
[root@k8s-master-node1 ~]# kubectl get service
NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
back-service                             ClusterIP   10.96.195.12   <none>        222/TCP                      44s
ingress-out                              NodePort    10.96.187.67   <none>        80:30800/TCP,443:30443/TCP   24m
kubernetes                               ClusterIP   10.96.0.1      <none>        443/TCP                      120m
zzz-ingress-nginx-controller-admission   ClusterIP   10.96.19.21    <none>        443/TCP                      44m

记得添加上index.html主页文件

[root@k8s-worker-node1 ~]# cd /ttt/
[root@k8s-worker-node1 ttt]# cat index.html
this is test backend
[root@k8s-master-node1 ~]# kubectl get pod -o wide
NAME                                            READY   STATUS    RESTARTS   AGE     IP            NODE               NOMINATED NODE   READINESS GATES
backend-6559ddb665-zknxv                        1/1     Running   0          9m43s   10.244.1.17   k8s-worker-node1   <none>           <none>
zzz-ingress-nginx-controller-554c89857b-7kf7r   1/1     Running   0          51m     10.244.1.15   k8s-worker-node1   <none>           <none>
[root@k8s-master-node1 ~]# curl 10.244.1.17
this is test backend

然后编写yaml,部署ingress连接ingress-nginx和后端应用的内部service

[root@k8s-master-node1 ~]# kubectl get ingress
NAME      CLASS    HOSTS         ADDRESS   PORTS   AGE
ingress   <none>   www.aaa.com             80      4s
[root@k8s-master-node1 ~]# cat ingress.yaml
#新版本中已经弃用networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    #一定要添加注解,否则无法被写入到ingress-nginx控制器当中spec:
  rules:
  - host: www.aaa.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: back-service    #内部的service
            port:
              number: 222
[root@k8s-master-node1 ~]# kubectl describe ingress ingress
Name:             ingress
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host         Path  Backends
  ----         ----  --------
  www.aaa.com
               /   back-service:222 (10.244.1.17:80)
Annotations:   <none>
Events:        <none>

pathType的Exact类型,是精准匹配url路径,并且区分大小写

pathType的Prefix类型,是根据url中的/分割前缀进行匹配

发现已经成功匹配到,然后进入ingress-nginx查看配置是否存在。(nginx ingress controller是一个反向代理程序

[root@k8s-master-node1 ~]# kubectl exec zzz-ingress-nginx-controller-554c89857b-7kf7r cat /etc/nginx/nginx.conf|grep www
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
        # See https://www.nginx.com/blog/websocket-nginx
                        # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
        ## start server www.aaa.com
                server_name www.aaa.com ;
                        # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
        ## end server www.aaa.com

发现配置已经成功被写入ingress-nginx控制器。然后修改客户机hosts文件

添加www.aaa.com解析到kubernetes节点ip

最后访问测试

 (ingress-nginx部署 – ning-cloud – 博客园

原文地址:https://blog.csdn.net/m0_54534480/article/details/128148100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31204.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注