**node 节点包含2个组件**:
**kubelet**: kube-node 与API通信,控制docker创建删除等一系列客户端操作
**kube-proxy**: 使用iptables规则发布应用服务与负载均衡
**kubelet-bootstrap用户赋权**
~~~
# 给与 kubelet-bootstrap 用户赋予权限(必须执行)
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
~~~
注:在装有kubectl的master节点执行,只需执行一次。
kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubel-bootstrap 用户赋予 system:node-bootstrapper cluster 角色(role),然后 kubelet 才能有权限创建认证请求(certificate signing requests)
--user=kubelet-bootstrap 是在 /etc/kubernetes/token.csv 文件中指定的用户名,同时也写入了 /etc/kubernetes/bootstrap.kubeconfig 文件。
**安装conntrack**
`yum install conntrack-tools -y`
kube-proxy 组件会使用其处理 iptables 规则;
**注意**:先部署node节点,master节点部署node组件涉及一些改动,文末会介绍。
**创建 kubelet 的 systemd**
~~~
mkdir /var/lib/kubelet
vim /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/local/bin/kubelet \
$KUBELET_ADDRESS \
$KUBELET_PORT \
$KUBELET_HOSTNAME \
$KUBELET_POD_INFRA_CONTAINER \
$KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=multi-user.target
~~~
**kubelet配置文件**
~~~
vim /etc/kubernetes/kubelet
###
## kubernetes kubelet (minion) config
## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--node-ip=192.168.50.1 --address=192.168.50.1"
## The port for the info server to serve on
#KUBELET_PORT="--port=10250"
## You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=192.168.50.1 --node-labels=node-role.kubernetes.io/k8s-node=true"
## pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.cn-beijing.aliyuncs.com/k8s_images/pause-amd64:3.1"
## Add your own!
KUBELET_ARGS="--allow-privileged=true \
--bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \
--cluster-dns=10.254.0.2 \
--cluster-domain=cluster.local \
--cgroup-driver=cgroupfs \
--cert-dir=/etc/kubernetes/ssl \
--fail-swap-on=false \
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
--rotate-certificates \
--serialize-image-pulls=false \
--logtostderr=true \
--v=2"
~~~
**以下参数需要改动:**
--node-ip:填写node节点ip,集群以这个ip作为node节点的ip
--address:填写node节点ip,kubelet会监听此地址的10250端口提供服务,不能设置为 127.0.0.1,否则后续 Pods 访问 kubelet 的 API 时会失败,因为Pods访问的 127.0.0.1 指向自己而不是 kubelet;
--hostname-override:设置节点名称,如果设置了该选项,kube-proxy 也需要设置该选项,否则会出现找不到 Node 的情况;
--node-labels:标识节点是master还是node,node-role.kubernetes.io/k8s-node=true 如果是master节点则改为k8s-master=true;
**以下参数不需要改动:**
--pod-infra-container-image 任何容器启动前都会加载这个init镜像初始化容器网络等操作;
--cgroup-driver 如果不配置默认也是cgroupfs,要保持 docker 和 kubelet 中的 cgroup driver 配置一致即可,不然启动失败。
--bootstrap-kubeconfig 指向 bootstrap kubeconfig 文件,kubelet 使用该文件中的用户名和 token 向 kube-apiserver 发送 TLS bootstrapping 请求;管理员通过了 CSR 请求后,kubelet 自动在 --cert-dir 目录创建证书和私钥,然后写入 kubelet-kubeconfig 文件并使用此文件启动kubelet;
--cluster-dns 指定dns的ip,现在还没搭建dns先写上,--cluster-domain 指定域名后缀,这两个参数同时指定后才会生效;
--cluster-domain 指定 pod 启动时 /etc/resolve.conf 文件中的 search domain;
--serialize-image-pulls 默认是true,表示一次只拉取一个镜像;
--fail-swap-on=false 如果不设置这个,需要关闭系统的swap;
--rotate-certificates 开启证书到期自动续签;
--kubeconfig=配置文件, kubelet.kubeconfig 文件在第一次启动 kubelet 之前并不存在,当通过CSR请求后会自动生成kubelet.kubeconfig 文件;里面包含server地址,通过此地址连接到apiserver。
**注:关于在master节点部署kubelet,node节点忽略**
按照前面的步骤正常配置,在启动服务前修改配置文件,将server的ip改成master自身节点的ip,修改后启动在kubelet服务。node节点不需要修改。
~~~
vim /etc/kubernetes/bootstrap.kubeconfig
server: https://192.168.50.101:6443
~~~
**启动和检查kubelet服务**
~~~
systemctl daemon-reload
systemctl start kubelet && systemctl enable kubelet
#查看服务是否启动成功
systemctl status kubelet
#查看日志是否有报错
journalctl -u kubelet
~~~
~~~
查看csr请求
kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-gNJtWd_FGjk3KDfWS2bjDarjP7KLrUCcJrv4IDOQJ6M 32s kubelet-bootstrap Pending
通过csr请求
kubectl certificate approve node-csr-gNJtWd_FGjk3KDfWS2bjDarjP7KLrUCcJrv4IDOQJ6M
~~~
node节点生成的证书位置`ls /etc/kubernetes/ssl/kubelet*`;
如果更新 kubernetes 的证书,只要没有更新 token.csv,当重启 kubelet 后,该 node 就会自动加入到 kuberentes 集群中。
**查看集群中的node节点**
~~~
kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.50.1 Ready k8s-node 4d v1.10.4
~~~
**创建kube-proxy的systemd**
~~~
vim /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/proxy
ExecStart=/usr/local/bin/kube-proxy \
$KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
~~~
**kube-proxy配置文件**
~~~
vim /etc/kubernetes/proxy
###
# kubernetes proxy config
# default config should be adequate
# Add your own!
KUBE_PROXY_ARGS="--bind-address=192.168.50.1 \
--hostname-override=192.168.50.1 \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--cluster-cidr=10.254.0.0/16 \
--logtostderr=true \
--v=2"
~~~
**以下参数需要改动:**
--bind-address 填写本机ip,作为proxy监听的地址,1.10版本无论填写什么后台都默认使用127.0.0.1;
--hostname-override=节点名,保证和kubelet上的配置一样;
**以下参数不需要改动:**
kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT。
--kubeconfig 指定的配置文件嵌入了 kube-apiserver 的地址、用户名、证书、秘钥等请求和认证信息;
预定义的 RoleBinding cluster-admin 将User system:kube-proxy 与 Role system:node-proxier 绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限。
**关于在master节点部署kube-proxy,node节点忽略**
按照前面的步骤正常配置,在启动服务前修改配置文件,将server的ip改成master自身节点的ip,修改后启动在kube-proxy服务。node节点不需要修改。
~~~
vim /etc/kubernetes/kube-proxy.kubeconfig
server: https://192.168.50.101:6443
~~~
**启动和检查kube-proxy服务**
~~~
systemctl daemon-reload
systemctl start kube-proxy && systemctl enable kube-proxy
#查看服务是否启动成功
systemctl status kube-proxy
#查看日志是否有报错
journalctl -u kube-proxy
~~~
注:具体修改原因请查看**部署master节点**文末
- 部署介绍
- 一,系统初始化操作
- 二,创建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
