kubernetes高可用集群部署 - 3. kubectl工具

2017-09-28  本文已影响4820人  殷临风

kubectlk8s集群的命令行工具, 基本上整个集群的运维操作都靠它, 所以需要事先配置好它

1. k8s运行环境配置

# 下载k8s相关的二进制包解压
wget https://dl.k8s.io/v1.6.1/kubernetes-server-linux-amd64.tar.gz
tar -xzvf kubernetes-server-linux-amd64.tar.gz

# 里面还有一层压缩包
cd kubernetes
tar -xzvf kubernetes-src.tar.gz

# 将相关的工具复制到指定目录
mkdir -p /opt/k8s/bin
cp -r server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy,kubectl} /opt/k8s/bin/

# 设置环境变量, 底部追加
vi /etc/profile
##############################################
export PATH=$PATH:/opt/k8s/bin
##############################################

# 使之生效
source /etc/profile

Master只需要启动3个服务, 分别为kube-apiserver, kube-controller-manager, kube-scheduler
Node只需要启动2个服务, 分别为kubelet, kube-proxy

2. 创建kubectl kubeconfig文件
mkdir -p /etc/kubernetes
cd /etc/kubernetes
export KUBE_APISERVER="https://192.168.1.88:6443"

# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER}

# 设置客户端认证参数
kubectl config set-credentials admin \
  --client-certificate=/etc/kubernetes/ssl/admin.pem \
  --embed-certs=true \
  --client-key=/etc/kubernetes/ssl/admin-key.pem

# 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin

# 设置默认上下文
kubectl config use-context kubernetes
  • KUBE_APISERVER 这里指定SLB的地址, 因为我们是通过SLB来请求masterkube-apiserver.
  • admin.pem 证书 OU 字段值为 system:masterskube-apiserver 预定义的 RoleBinding cluster-adminGroup system:mastersRole cluster-admin 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限;
  • 生成的 kubeconfig 被保存到 ~/.kube/config 文件;

可以将~/.kube/config文件复制到其他用户目录下, 这样其他用户也可以使用kubectl命令了

3. 创建TLS Bootstrapping Token
cd /etc/kubernetes
# 随机生成token值
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
# 写入文件
tee token.csv << EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

尽量不要更新BOOTSTRAP_TOKEN值, 如果要更新, kube-apiserver使用的token.csv文件和kubelet使用的bootstrap.kubeconfig文件都需要更新, 更新后还需要重启kube-apiserverkube-proxy服务

4. 创建kubelet bootstrapping kubeconfig文件
cd /etc/kubernetes
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=bootstrap.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
  --token=${BOOTSTRAP_TOKEN} \
  --kubeconfig=bootstrap.kubeconfig

# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kubelet-bootstrap \
  --kubeconfig=bootstrap.kubeconfig

# 设置默认上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig

--embed-certstrue时, 表示将certificate-authority证书写入到生成的bootstrap.kubeconfig文件中;

5. 创建kube-proxy kubeconfig文件
cd /etc/kubernetes
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kube-proxy.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials kube-proxy \
  --client-certificate=/etc/kubernetes/ssl/kube-proxy.pem \
  --client-key=/etc/kubernetes/ssl/kube-proxy-key.pem \
  --embed-certs=true \
  --kubeconfig=kube-proxy.kubeconfig

# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kube-proxy \
  --kubeconfig=kube-proxy.kubeconfig

# 设置默认上下文
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
  • 设置集群参数和客户端认证参数时 --embed-certs 都为 true,这会将 certificate-authority、client-certificate 和 client-key 指向的证书文件内容写入到生成的 kube-proxy.kubeconfig 文件中;
  • kube-proxy.pem 证书中 CN 为 system:kube-proxy,kube-apiserver 预定义的 RoleBinding cluster-admin 将User system:kube-proxy 与 Role system:node-proxier 绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限;
6. 分发kubeconfig文件

如果一切顺利的话, 在/etc/kubernetes文件夹和用户文件夹可以看到这些

ll ~/.kube
ll /etc/kubernetes

确定无误之后

  • token.csv复制到其他master相对应的/etc/kubernetes中, 供kube-apiserver使用;
  • bootstrap.kubeconfigkube-proxy.kubeconfig复制到其他node节点的/etc/kubernetes中, 供kubelekube-proxy使用
  • ~/.kube/config复制到任意想使用kubectl命令行工具的服务器中

高可用部署系列

Kubernetes高可用集群部署 - 1. 生成证书
Kubernetes高可用集群部署 - 2. ETCD集群
-> Kubernetes高可用集群部署 - 3. kubectl工具配置
Kubernetes高可用集群部署 - 4. master集群
Kubernetes高可用集群部署 - 5. node集群
Kubernetes高可用集群部署 - 6. DNS配置

相关服务

Kubernetes配置secret拉取私仓镜像
Kubernetes目录挂载
Kubernetes Ingress使用
Kubernetes限制pod的cpu和内存
Helm部署Kubernetes应用
Kubernetes监控(Heapster)
Kubernetes监控(coreos/prometheus-operator)

上一篇下一篇

猜你喜欢

热点阅读