企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
**安装kubectl** ~~~ #在master01节点安装 #下载的这个是K8S安装包,包含了所有K8S的组件,可能需要翻墙下载 cd && wget https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz tar -zxvf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin/ cp kube-apiserver kube-controller-manager kube-scheduler kubectl kubelet kube-proxy /usr/local/bin/ chmod a+x /usr/local/bin/kube* ~~~ **拷贝k8s组件到其他节点** ~~~ master节点需要全部组件: scp /usr/local/bin/kube* root@192.168.50.102:/usr/local/bin/ node节点需要2个组件: scp /usr/local/bin/kubelet kube-proxy root@192.168.50.1:/usr/local/bin/ ~~~ **创建 admin-config** ~~~ cd /etc/kubernetes export KUBE_APISERVER="https://192.168.50.101:6443" #填写master本机ip地址 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 ls /root/.kube/ ~~~ 这个是用admin.pem证书生成的config文件,这个文件是kubectl连接api时使用的,连接的是master本机的ip地址,权限是admin权限; 生成的 config 被保存到 /root/.kube/config 下; 如果在master以外的机器上使用Kubectl,修改config文件中的server地址为SLB地址; **创建 kube-proxy kubeconfig** ~~~ export KUBE_APISERVER="https://192.168.50.103:6443" #填写SLB的地址 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 ls 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 的权限。 **创建 kubelet kubeconfig** 不好意思这玩意没法创建,为啥呢?上一章创建证书时就没有给它生成证书, 那程序要用怎么办? kubelet会在启动时向apiserver申请证书,然后由controller-manager处理签名请求,也就是说给每个kubelet节点签了一个属于自己的证书,然后由程序自动生成一个包含证书的kubelet-kubeconfig文件,这样每个kubelet启动后就都有证书和配置文件了,我们需要创建是这个签名请求文件,名字叫kubelet bootstrap.kubeconfig。 **1,创建Token** ~~~ export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ') cat > token.csv <<EOF ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap" EOF ~~~ 这里是先生成一个token.csv文件,使用随机数生成,可以查看一下文件,里面包含了一个128bit的随机数,这玩意是干啥的?将这个文件放在apiserver的启动项里,再放在kubelet的kubelet bootstrap.kubeconfig文件里,kubelet启动后向api请求签名的时候,校验这个东西,如果双方的token一致,则认为是合法的请求,防止假冒伪劣的终端向api申请证书签名。 **2,创建 kubelet bootstrap.kubeconfig** ~~~ export KUBE_APISERVER="https://192.168.50.103:6443" #填写SLB的地址 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 ls bootstrap.kubeconfig #确认已经生成 ~~~ **分发文件** 将生成的kubeconfig文件和上一章节生成的证书,全部拷贝到其他K8S节点相同目录下。 ~~~ scp -r /etc/kubernetes root@192.168.50.102:/etc scp -r /etc/kubernetes root@192.168.50.1:/etc ~~~ ![](https://box.kancloud.cn/7f1581ab999a4ec66a89184effc1a52b_426x81.png) 至此证书和kubeconfig文件生成完毕。