九零不老心
发布于 2019-05-17 / 10 阅读 / 0 评论 / 0 点赞

安装helm

官方参考地址:https://helm.sh/docs/using_helm/#quickstart-guide
中文版:https://whmzsu.github.io/helm-doc-zh-cn/quickstart/tiller_ssl-zh_cn.html
https://hub.helm.sh/charts/stable
https://whmzsu.github.io/helm-doc-zh-cn/quickstart/using_helm-zh_cn.html
一、 前提条件:
        必须安装了kubernetes集群
        必须拥有本地配置好的kubectl
二、安装client端(Helm CLI)
    #脚本安装
        curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
        chmod u+x get_helm.sh
        ./get_helm.sh
    #二进制安装
        wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz
        tar -xzvf helm-v2.14.0-linux-amd64.tar.gz
        cp linux-amd64/helm /usr/local/bin/helm &&  cp linux-amd64/tiller /usr/local/bin/tiller
三、安装server端(tiller是服务端组件,会安装到kubernetes集群里)
    #安装ssl/tls的tiller(https://helm.sh/docs/using_helm/#using-ssl-between-helm-and-tiller)
        cd /etc/kubernetes/pki && mkdir helm
        cd helm
        #制作CA RSA私钥
            openssl genrsa -out ./ca.key.pem 4096
        #制作CA根证书
            openssl req -key ca.key.pem -new -x509 -days 7300 -sha256 -out ca.cert.pem -extensions v3_ca -subj "/C=CN/O=HELM/CN=HELM"
        #生成tiller RSA私钥
            openssl genrsa -out ./tiller.key.pem 4096
        #生成helm RSA私钥
            openssl genrsa -out ./helm.key.pem 4096
        #生成tiller私钥的签名请求对(csr)
            openssl req -key tiller.key.pem -new -sha256 -out tiller.csr.pem -subj "/C=CN/O=HELM/CN=TILLER"
        #生成helm私钥的签名请求(csr)
            openssl req -key helm.key.pem -new -sha256 -out helm.csr.pem -subj "/C=CN/O=HELM/CN=HELM"
        #使用CA根证书对tiller的签名请求(csr)签名
            #openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in tiller.csr.pem -out tiller.cert.pem -days 365
            #默认情况下,Helm 客户端通过隧道(即 kube 代理)127.0.0.1 连接到 Tiller。 在 TLS 握手期间,通常提供主机名(例如 example.com),对证书进行检查,包括附带的信息。 但是,由于通过隧道,目标是 IP 地址。因此,要验证证书,必须在 Tiller 证书中将 IP 地址 127.0.0.1 列为 IP 附带备用名称(IP SAN: IP subject alternative name)。
                例如,要在生成 Tiller 证书时将 127.0.0.1 列为 IP SAN:
                echo subjectAltName=IP:127.0.0.1 > extfile.cnf
                openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in tiller.csr.pem -out tiller.cert.pem -days 365 -extfile extfile.cnf
        #使用CA根证书对helm的签名请求(csr)签名
            openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in helm.csr.pem -out helm.cert.pem  -days 365
        #查看证书内容命令
            openssl x509 -text -noout -in tiller.cert.pem
        #初始化tiller(注意helm客户端版本要跟服务端tiller images版本兼容)
            cd ~
            #无安全认证
                helm init --history-max=0 --debug --upgrade --service-account tiller  --tiller-namespace kube-system --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
            #启用TLS安全认证(后续教程启用了TLS)
                helm init --history-max=0 --debug --upgrade --service-account tiller  --tiller-namespace kube-system --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts --tiller-tls --tiller-tls-cert /etc/kubernetes/pki/helm/tiller.cert.pem --tiller-tls-key /etc/kubernetes/pki/helm/tiller.key.pem --tiller-tls-verify --tls-ca-cert /etc/kubernetes/pki/helm/ca.cert.pem
        #kubernetes上给tiller新建账户和角色(helm-tiller.yaml详见同级目录的helm-tiller.yaml)
            kubectl create --save-config -f helm-tiller.yaml
            #kubectl delete -f helm-tiller.yaml
        #查看授权是否成功
            kubectl get deploy --namespace kube-system   tiller-deploy  --output yaml | grep  serviceAccount

四、配置client tls
   #执行 helm ls 会报错:Error: transport is closing,这是因为您的 Helm 客户端没有正确的证书来向 Tiller 进行身份验证。
        helm ls --debug
        helm ls --tls --tls-ca-cert /etc/kubernetes/pki/helm/ca.cert.pem --tls-cert /etc/kubernetes/pki/helm/helm.cert.pem --tls-key /etc/kubernetes/pki/helm/helm.key.pem --debug
    #更快捷的方式是
        \cp -f /etc/kubernetes/pki/helm/ca.cert.pem $HOME/.helm/ca.pem
        \cp -f /etc/kubernetes/pki/helm/helm.cert.pem $HOME/.helm/cert.pem
        \cp -f /etc/kubernetes/pki/helm/helm.key.pem  $HOME/.helm/key.pem
        helm ls --tls --debug

五、验证
    helm version --tls --debug
    kubectl get pods -n kube-system | grep tiller
    kubectl -n kube-system get deployment
    kubectl logs $(kubectl get pods -n kube-system | grep tiller | awk '{print $1}') -n kube-system
    #查看服务
        kubectl get svc  -n kube-system | grep tiller
    #验证端口
        kubectl get pods tiller-deploy-c595846c-vf4vr --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' -n kube-system

六、如何删除和重置
    kubectl delete deployment tiller-deploy -n kube-system
    kubectl delete service tiller-deploy -n kube-system
    kubectl delete -f helm-tiller.yaml
    rm -rf $HOME/.helm
    或者
    helm reset -f && helm reset --remove-helm-home(存在无法连接tiller pod,reset失败的情况,只能使用上面的办法删除)

七、使用helm
    helm search
    helm repo list
    helm repo update
    helm list --tls
    #因为kubernetes集群开启了rbac,所以安装的时候需要创建rbac权限
        helm install stable/nginx-ingress  --name nginx-ingress --tls --debug --set rbac.create=true
    #查看状态
        helm status nginx-ingress --tls
    #升级版本
        helm upgrade nginx-ingress stable/nginx-ingress -f ./values.yaml --tls

直接粘贴笔记,格式不太美观,教程原文件及yaml配置文件,可以直接百度云下载后浏览:https://pan.baidu.com/s/14KArQ7yWhqWJEgcVZrxE6Q 提取码:86mq