1 - 常见问题


1、何为PEM格式?

PEM格式通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, and .key。内容为Base64编码的ASCII码文件,有类似"——-BEGIN CERTIFICATE——-" 和 "——-END CERTIFICATE——-"的头尾标记。服务器认证证书,中级认证证书和私钥都可以储存为PEM格式(认证证书其实就是公钥)。Apache和类似的服务器使用PEM格式证书。

您可以通过以下特征识别PEM格式:

  1. - 该文件以下列标题开头:
  2. -----BEGIN CERTIFICATE-----
  3. - 标题后面跟着一串长字符
  4. - 该文件以页脚结尾:
  5. -----END CERTIFICATE-----

PEM证书例如:

  1. ----BEGIN CERTIFICATE-----
  2. MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
  3. ... more lines
  4. VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
  5. -----END CERTIFICATE-----

2、如果我想添加我的中间证书,证书的顺序是什么?

添加证书的顺序如下:

  1. -----BEGIN CERTIFICATE-----
  2. %YOUR_CERTIFICATE%
  3. -----END CERTIFICATE-----
  4. -----BEGIN CERTIFICATE-----
  5. %YOUR_INTERMEDIATE_CERTIFICATE%
  6. -----END CERTIFICATE-----

3、我如何验证我的证书链?

您可以使用openssl二进制验证证书链。如果该命令的输出(参见下面的命令示例)结束Verify return code: 0 (ok),那么证书链是有效的。该ca.pem文件必须与您添加到rancher/rancher容器中的文件相同。当使用由认可的认证机构签署的证书时,可以省略该-CAfile参数。

命令:

  1. openssl s_client -CAfile ca.pem -connect rancher.yourdomain.com:443
  2. ...
  3. Verify return code: 0 (ok)

4、持久数据

Rancher etcd用作数据存储,使用单节点安装时,将使用内置etcd。持久数据位于容器中的以下路径中: /var/lib/rancher。您可以将主机卷挂载到此位置以保留其运行的数据。

命令:

  1. # 指定主机路径
  2. HOST_PATH=xxxx
  3. docker run -d --restart=unless-stopped \
  4. -p 80:80 -p 443:443 \
  5. -v $HOST_PATH:/var/lib/rancher \
  6. rancher/rancher:stable (或者rancher/rancher:latest)

5、如何在同一个主机上运行Rancher/Rancher和Rancher/Rancher-Agent

在您想要使用单个节点运行Rancher并且能够将相同节点添加到集群的情况下,您必须调整为rancher/rancher容器映射的主机端口。

如果一个节点被添加到集群,它将部署使用端口80和443的ingress控制器。这与rancher/rancher容器默认映射的端口冲突。

注意不建议在生产中把Rancher/Rancher和Rancher/Rancher-Agent运行在一台主机上,但可用于开发/演示。

要更改主机端口映射,替换-p 80:80 -p 443:443-p 8080:80 -p 8443:443:

  1. docker run -d --restart=unless-stopped \
  2. -p 8080:80 -p 8443:443 \
  3. -v <主机路径>:/var/lib/rancher/ \
  4. rancher/rancher:stable (或者rancher/rancher:latest)

6、如何重置管理员密码?

  • 单节点安装
  1. docker exec -ti <container_id> reset-password
  2. New password for default admin user (user-xxxxx):
  3. <new_password>
  • HA安装(Helm)
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG -n cattle-system exec $(kubectl --kubeconfig $KUBECONFIG -n cattle-system get pods -l app=rancher | grep '1/1' | head -1 | awk '{ print $1 }') -- reset-password
  3. New password for default admin user (user-xxxxx):
  4. <new_password>
  • HA安装(RKE)
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG exec -n cattle-system \
  3. $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system \
  4. -o json | jq -r '.items[] | \
  5. select(.spec.containers[].name=="cattle-server") | \
  6. .metadata.name') -- reset-password
  7. New password for default admin user (user-xxxxx):
  8. <new_password>

7、我删除/停用了管理员,我该如何恢复?

  • 单节点安装
  1. docker exec -ti <container_id> ensure-default-admin
  2. New default admin user (user-xxxxx)
  3. New password for default admin user (user-xxxxx):
  4. <new_password>
  • HA安装(Helm)
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG -n cattle-system exec $(kubectl --kubeconfig $KUBECONFIG -n cattle-system get pods -l app=rancher | grep '1/1' | head -1 | awk '{ print $1 }') -- ensure-default-admin
  3. New password for default admin user (user-xxxxx):
  4. <new_password>
  • HA安装(RKE)
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG exec -n cattle-system \
  3. $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system \
  4. -o json | jq -r '.items[] | select(.spec.containers[].name=="cattle-server") | \
  5. .metadata.name') -- ensure-default-admin
  6. New password for default admin user (user-xxxxx):
  7. <new_password>

8、怎么样开启debug模式?

单节点安装

  • 启用
  1. docker exec -ti <container_id> loglevel --set debug
  2. OK
  3. docker logs -f <container_id>
  • 禁用
  1. docker exec -ti <container_id> loglevel --set info
  2. OK

HA安装(RKE)

  • 启用
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG exec -n cattle-system \
  3. $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system \
  4. -o json | jq -r '.items[] | select(.spec.containers[].name=="cattle-server") \
  5. | .metadata.name') -- loglevel --set debug
  6. OK
  7. kubectl --kubeconfig $KUBECONFIG logs -n cattle-system -f \
  8. $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system \
  9. -o json | jq -r '.items[] | select(.spec.containers[].name="cattle-server") | \
  10. .metadata.name')
  • 禁用
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG exec -n cattle-system \
  3. $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system \
  4. -o json | jq -r '.items[] | select(.spec.containers[].name=="cattle-server") | \
  5. .metadata.name') -- loglevel --set info
  6. OK

HA安装(Helm)

  • 启用
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG -n cattle-system \
  3. get pods -l app=rancher | grep '1/1' | awk '{ print $1 }' | \
  4. xargs -I{} kubectl --kubeconfig $KUBECONFIG -n cattle-system \
  5. exec {} -- loglevel --set debug
  6. kubectl --kubeconfig $KUBECONFIG -n cattle-system logs -l app=rancher
  • 禁用
  1. KUBECONFIG=./kube_config_rancher-cluster.yml
  2. kubectl --kubeconfig $KUBECONFIG -n cattle-system \
  3. get pods -l app=rancher | grep '1/1' | awk '{ print $1 }' | \
  4. xargs -I{} kubectl --kubeconfig $KUBECONFIG -n cattle-system exec {} \
  5. -- loglevel --set info

9、ClusterIP无法ping通?

ClusterIP是一个虚拟IP,不会响应ping。测试ClusterIP配置是否正确的最好方法是使用curl来访问IP和端口以查看它是否响应。

10、我在哪里可以管理主机模板?

打开您的帐户菜单(右上角),并选择主机模板

11、为什么我的L4层负载均衡服务处于“挂起”状态?

L4层负载均衡器创建为type:LoadBalancer,在Kubernetes中,这需要云提供商或控制器能够满足这些请求,否则这些将永远处于“挂起”状态。 了解更多云提供商 或者 Create External Load Balancer

12、Rancher的状态存储在什么地方?

  • 单节点安装在rancher/rancher容器的内置etcd中,映射与宿主机的/var/lib/rancher目录下。

  • HA安装RKE部署集群指定的ETCD中,默认与Kubernetes共有一套ETCD服务。

13、如何确定支持的Docker版本?

我们遵循经过Kubernetes官方验证过的Docker版本,已验证的Docker版本可以在Kubernetes的发版记录中找到。

14、我如何访问Rancher创建的节点?

可以通过节点视图下载用于访问节点的SSH密钥。选择要访问的节点,然后单击行末的垂直省略号按钮,然后选择下载密钥,如下图所示:

下载Keys

解压缩下载的zip文件,并使用文件id_rsa连接到您的主机。一定要使用正确的用户名(rancher for RancherOS, ubuntu for Ubuntu, ec2-user for Amazon Linux)

  1. ssh -i id_rsa user@ip_of_node

15、如何在Rancher中自动执行任务

UI由静态文件组成,并且基于API的响应而工作。这意味着您可以在UI中执行的每个操作/任务都可以通过API自动执行。有两种方法可以做到这一点:

16、节点的IP地址发生了变化,我该如何恢复?

节点需要配置静态IP(或通过DHCP保留IP)。如果节点的IP已更改,则必须将其从集群中删除。删除后,Rancher会将集群更新为正确的状态。如果集群不再处于Provisioning状态,则已经从集群中删除该节点。当节点的IP地址发生变化时,Rancher失去了与节点的连接,因此无法正常清理节点。请参阅清理集群节点以清除节点。

从集群中删除节点并清除节点后,您可以将节点重新添加到集群。

17、如何在Rancher安装的Kubernetes集群中向Kubernetes组件添加额外的arguments/binds/environment?

可以通过集群选项中的配置文件选项添加额外的arguments/binds/environment。有关更多信息,请参阅RKE文档中的Extra Args,Extra Binds和Extra Environment Variables,或浏览Example Cluster.ymls示例

18、为什么在节点出现故障时重新调度pod需要5分钟以上?

这是由于以下默认Kubernetes设置的组合:

  • kubelet

    • node-status-update-frequency:指定kubelet将节点状态发布到master的频率(默认为10秒)
  • kube-controller-manager

    • node-monitor-period:在NodeController中同步NodeStatus的时间段(默认5秒)
    • node-monitor-grace-period:在标记运行节点不健康之前允许运行节点无响应的时间(默认为40秒)
    • pod-eviction-timeout:删除失败节点上的pod的宽限期(默认为5m0)有关这些设置的更多信息,请参阅Kubernetes:kubeletKubernetes:kube-controller-manager

19、如何通过证书查询Common Name和Subject Alternative Names?

  • 检查Common Name
  1. openssl x509 -noout -subject -in cert.pem
  2. subject=/CN=rancher.my.org
  • 检查Subject Alternative Names
  1. openssl x509 -noout -in cert.pem -text | grep DNS
  2. DNS: rancher.my.org