Kubernetes实录-第一篇-使用helm在kubernetes集群上部署rancher

本篇记录使用helm在kubernetes集群上部署rancher v2.5.5 注意:rancher v2.5.5的helm chart目前不支持kubernetes 1.20.x版本,默认支持版本是1.19.x.官方配置文档:https://rancher.com/docs/rancher/v2.x/en/installation/install-rancher-on-k8s/, 如下是官方给出的配置步骤。
在这里插入图片描述
我们就在官方给的步骤基础上进行修改以满足我们的部署需求:

  1. 参考官方文档,采用kubernetes+helm+rancher-chart方式部署
  2. rancher-chart默认ingress的controller由nginx通过配置参数的方式修改为traefik
  3. rancher-chart模式的https模式采用external模式,通过外部的load balancer(netscaler)处理TLS证书(即TLS will be terminated on a load balancer)

我们用来集成部署rancher的kubernetes集群信息

# kubectl get node -o wide
NAME                  STATUS   ROLES    AGE   VERSION   INTERNAL-IP    OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
ejucsmaster-shylf-1   Ready    master   25h   v1.19.8   10.116.72.7    CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14
ejucsmaster-shylf-2   Ready    master   25h   v1.19.8   10.116.72.8    CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14
ejucsmaster-shylf-3   Ready    master   25h   v1.19.8   10.116.72.9    CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14
ejucsnode-shylf-11    Ready    node     25h   v1.19.8   10.116.72.11   CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14
ejucsnode-shylf-12    Ready    node     25h   v1.19.8   10.116.72.12   CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14
ejucsnode-shylf-13    Ready    node     25h   v1.19.8   10.116.72.13   CentOS Linux 7 (Core)   3.10.0-1160.11.1.el7.x86_64   docker://19.3.14

1. 安装需要的CLI工具 [Install the Required CLI Tools]

1.1 kubectl配置

我们实验工作直接在kubernetes的一个master节点执行,kubectl默认已经配置完成。

1.2 helm配置

在执行操作的master节点配置helm [helm+kubectl也可以单独部署一个用于工作的服务器,与节点隔离开,防止误操作]

wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
tar zxvf helm-v3.5.2-linux-amd64.tar.gz
cd linux-amd64
cp helm /usr/local/bin/
chmod +x /usr/local/bin/helm

helm version
version.BuildInfo{Version:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", GitTreeState:"dirty", GoVersion:"go1.15.7"}

2. 添加Helm chart仓库 [Add the Helm chart repository]

使用helm repo add 添加Rancher chart仓库用于配置rancher, rancher仓库分为Latest,Stable, Alpha版本,我们使用Stable版本仓库

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest

helm repo list
NAME            URL                                              
stable          https://apphub.aliyuncs.com/stable               
rancher-stable  https://releases.rancher.com/server-charts/stable   # rancher chart repository

3. 在kubernetes为rancher创建命名空间 [Create a namespace for Rancher]

我们需要为rancher chart安装配置创建命名空间namespace, 这个命名空间应该使用固定名称cattle-system

kubectl create namespace cattle-system

# kubectl get ns
NAME                                     STATUS   AGE
cattle-system                            Active   28h
... # 其他省略显示

4. 选择SSL配置 [Choose your SSL configuration]

4.1 ssl配置模式选择

rancher模式是安全模式,需要SSL/TLS证书配置。有多种配置解析处理SSL/TLS证书的方式,我们参考的官方访问上有3种推荐的模式,但不是我们需要的。我们选择使用外部的Load balancer (使用的硬件产品netscaler,如果没有也可以直接使用nginx作为LoadBalancer)来处理TLS证书。模式示意图如下:
在这里插入图片描述

4.2 负载均衡器配置

我这边实际产线使用的是netscaler具体配置就不再这里展示了。我这里展示使用nginx作为外部7层负载均衡器(load balancer的配置),我使用的域名是rancher.ejuops.com, 根据实际使用域名进行修改配置。

  • 准备SSL/TLS证书
    我们没有准备证书,采用自定义证书,生成过程如下
    1. 生成CA证书私钥
    openssl genrsa -out ca.key 4096
    
    2. 生成CA证书
    openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=eju/OU=ops/CN=rancher.ejuops.com" -key ca.key -out ca.crt
    
    3. 生成服务证书
    3.1 生成私钥
    openssl genrsa -out rancher.ejuops.com.key 4096
    
    3.2 生成证书签名请求
    openssl req -sha512 -new -subj "/C=CN/ST=Shanghai/L=Shanghai/O=eju/OU=ops/CN=rancher.ejuops.com" -key rancher.ejuops.com.key -out rancher.ejuops.com.csr
    
    3.3 生成x509 v3扩展文件
    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1=rancher.ejuops.com
    EOF
    
    3.4 生成证书
    openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in rancher.ejuops.com.csr -out rancher.ejuops.com.crt
    
    
    3.5 将生成的证书放在nginx可以访问到的位置
    cp rancher.ejuops.com.crt rancher.ejuops.com.key /certs/
    
  • nginx配置参考 [参考官方文档 这里]
    vi nginx.conf
    ... # 省略
    http {
      ... # 省略
      map $http_upgrade $connection_upgrade {
        default Upgrade;
        ''      close;
      }
      include upstream/*.conf;
      include vhost.d/*.conf; 
    } 
    
    vi vhost.d/rancher.ejuops.com.conf   rancher.ejuops.com.conf
    server {
      listen 80;
      server_name rancher.ejuops.com;
      return 301 https://$server_name$request_uri;
    }
    server {
      listen 443 ssl http2;
      server_name rancher.ejuops.com;
      ssl_certificate /certs/rancher.ejuops.com.crt;     #TLS证书
      ssl_certificate_key /certs/rancher.ejuops.com.key; #TLS证书私钥
    
      location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://rancher;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 900s;
        proxy_buffering off;
      }
    }
    
    vi upstream/rancher.ejuops.com.conf  rancher.ejuops.com.conf
    upstream rancher {
      # traefik service 采用NodePort映射服务到集群外,这为kubernetes节点地址以及traefik服务对应的NodePort地址
      server 10.116.72.11:30080;
      server 10.116.72.12:30080;
      server 10.116.72.13:30080;
    }
    

4.3 匹配SSL选择的helm+rancher部署参考

# 1. 使用外部负载均衡,而且这样就不用部署cert-manager了。
--set tls=external

# 2. helm+rancher替换ingress由默认的nginx controller到traefik controller
--set ingress.extraAnnotations.'kubernetes\.io/ingress\.class'=ops-production-ingress \  # 在traefik配置文件中指定,这里要一致
--set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/router\.entrypoints'=http \ # 在traefik配置文件中指定的entrypoint
--set ingress.extraAnnotations.'kubernetes\.io/ingress\.allow-http'=\"true\"          \
--set ingress.extraAnnotations.'ingress\.kubernetes\.io/ssl-redirect'=\"false\"       \
--set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/frontend-entry-points'=\"http\"  \
--set ingress.extraAnnotations.'ingress\.kubernetes\.io/whitelist-x-forwarded-for'=\"true\" \
--set ingress.extraAnnotations.'ingress\.kubernetes\.io/protocol'=https

5. 使用Helm安装Rancher [Install Rancher with Helm and your chosen certificate option]

根据我们前面架构的选择指定参数配置启动rancher, rancher chart的更多参数仓库 这里

helm install rancher rancher-stable/rancher \
    --namespace cattle-system \
    --set hostname=rancher.ejuops.com \
    --set tls=external \
    --set ingress.extraAnnotations.'kubernetes\.io/ingress\.class'=ops-production-ingress \
    --set ingress.extraAnnotations.'kubernetes\.io/ingress\.allow-http'=\"true\"          \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/ssl-redirect'=\"false\"       \
    --set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/frontend-entry-points'=\"http\"  \
    --set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/router\.entrypoints'=http \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/whitelist-x-forwarded-for'=\"true\" \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/protocol'=https

观察rancher启动状态

kubectl -n cattle-system rollout status deploy/rancher
  Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available
  ...
  deployment "rancher" successfully rolled out

6. 验证rancher正确配置 [Verify that the Rancher server is successfully deployed]

6.1 kubectl查看deployment状态

kubectl -n cattle-system get deploy rancher
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
rancher   3         3         3            3           3m

6.2 浏览器访问

初次访问要求设置admin密码以及选择是否Multi-cluster模式。我这里初始访问没有记录下来,这里是之后登录的情况。
在这里插入图片描述

7. 保持Helm安装rancher参数 [Save Your Options]

后面根据需要还要升级或者修改rancher 的部署,需要将helm命令记录下来报错,为之后使用。

helm install rancher rancher-stable/rancher \
    --namespace cattle-system \
    --set hostname=rancher.ejuops.com \
    --set tls=external \
    --set ingress.extraAnnotations.'kubernetes\.io/ingress\.class'=ops-production-ingress \
    --set ingress.extraAnnotations.'kubernetes\.io/ingress\.allow-http'=\"true\"          \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/ssl-redirect'=\"false\"       \
    --set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/frontend-entry-points'=\"http\"  \
    --set ingress.extraAnnotations.'traefik\.ingress\.kubernetes\.io/router\.entrypoints'=http \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/whitelist-x-forwarded-for'=\"true\" \
    --set ingress.extraAnnotations.'ingress\.kubernetes\.io/protocol'=https

troubleshooting

问题描述

  1. 在rancher里面查看集群状态显示组件 controller manager, scheduler是非健康状态,如图
    在这里插入图片描述
  2. 使用kubectl指令查看,也显示这2个组件是非健康状态
    在这里插入图片描述

解决方法

修改controller-manager以及scheduler的容器启动参数,改完参数稍等下 相关容器会自动重新启动好
在这里插入图片描述

参考

  1. https://rancher.com/docs/rancher/v2.x/en/installation/install-rancher-on-k8s/#8-save-your-options
  2. https://rancher.com/docs/rancher/v2.x/en/installation/install-rancher-on-k8s/chart-options/#external-tls-termination
  3. https://rancher.com/docs/rancher/v2.x/en/installation/resources/advanced/rke-add-on/layer-7-lb/
  4. https://my.oschina.net/u/1431757/blog/4550843
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值