**安装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
~~~

至此证书和kubeconfig文件生成完毕。
- 部署介绍
- 一,系统初始化操作
- 二,创建TLS证书
- 三,创建kubeconfig文件
- 四,安装etcd集群
- 五,部署master节点
- 六,部署node节点
- 附,新增node节点
- 七,网络插件calico
- 八,安装DNS组件
- 九,安装dashboard
- 十,服务发布nginx-ingress
- 十一,prometheus监控部署
- 十二,prometheus自定义监控和报警
- 十三,Harbor私有仓库
- 十四,NFS数据持久化
- 其他
- linux相关文档
- centos7.4搭建openvpn
- docker-compose搭建ldap
- docker-compose搭建openvpn
- docker-compose搭建superset
- docker-compose搭建jenkins
