kubectl
是k8s
集群的命令行工具, 基本上整个集群的运维操作都靠它, 所以需要事先配置好它
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来请求master
的kube-apiserver
.admin.pem
证书 OU 字段值为system:masters
,kube-apiserver
预定义的RoleBinding cluster-admin
将Group system:masters
与Role 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-apiserver
和kube-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-certs
为true
时, 表示将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.kubeconfig
和kube-proxy.kubeconfig
复制到其他node
节点的/etc/kubernetes
中, 供kubele
和kube-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)
网友评论