Kubernetes(K8s)安装部署过程(六)--node节点部署

hi,everybody,我回来了,之前安装到flannel之后,文章一直没有更新,甚至不少小伙伴都来加qq询问是否继续更新了,

这里说明下原因,我在部署1.91node的时候的确出现了各种各样的问题,导致节点启动后哦,master总是看不到,遇到的问题大概有

1、虚拟机时间同步不一致问题,导致etcd创建资源不成功

2、node节点无法自动创建kubelet.kubeconfig问题,这个是最严重的问题,原因是config文件没有拷贝到node的/etc/kubernetes文件夹内,因为kubelet启动调用

kubelet配置文件的时候也会同时调用这个文件,具体见kubelt的servier文件配置方法,这个文件是自动生成的。如果没有自动生产,检查所有配置参数和报错,特别是config和kublet文件。

3、有关config文件并不是你从客户端拷贝过来的时候就直接可以用了,需要里面修改master地址,因为apiserver的配置启动参数绑定的地址中安全的访问地址是10.10.90.105:6443,不安全是127.0.0.1:8080,这里可以简单理解为6443是安全端口,不过只监听在master的10.10.90.105的ip上,所以要修改node中config配置文件的master地址为 10.10.90.90.105:6443,而如果你master节点同时也是node节点的话,我测试了这个形式,那么你的config文件只能用127.0.0.1:8080访问,使用6443也是不行的,也就是说本地和其他机器访问apiserver的方式不同时的,否则log中会狂报错无法连接api,这里注意一下,如果node复用了master节点同事需要重启scheduler和control服务。

4、Failed at step CHDIR spawning /usr/local/bin/kubelet: No such file or directory 是没有创建 /var/lib/kubelt文件夹

5、配置过程中一定要关闭防火墙,selinux,防止虚拟机重启了这些服务业自动重启。

6、1.8后面的kubelet配置文件不需要--api-servers参数,请注释掉!!

7、swap 分区请在/etc/fstab注释掉,并重启虚拟机和所有服务。

8、node节点涉及的docker服务文件的修改,这里容易出现问题,文章中我会介绍。

master文章说明:

  前面的master节点因为以前配置有问题,采用了其他apiversion,发现后面问题很多,并且缺少了node认证方式,我已经在更新了这一篇文正,请小伙伴们去查看相关文正

并重启apiserver服务,另外1.9的kubelet启动参数和1.8也少许变化,如果你发现你/var/log/message文章用友unknown flag的报错,就是你的参数不识别了,可以参考我的文章看哪个参数有出入。

好,上面只是一些我还有印象的注意事项,其他的请多多查看log文件排错。

废话不多说,直接开始配置node节点了,再次感慨大家的支持和等待!。

1、检查2个node节点配置文件和ssl证书是否齐全,这一步很重要。

注意ssl里面有几个kubelet开头的文件 ,是通过过自动生成的文件。

2、配置docker的服务文件

因为需要docker联合flannel使用,所以需要修改docker的服务service文件

我们前面是flannel插件是通过yum方式安装的,修改方式如下:

修改docker的配置文件/usr/lib/systemd/system/docker.service,增加一条环境变量配置:

EnvironmentFile=-/run/flannel/docker

同时为start添加一个参数 --exec-opt native.cgroupdriver=systemd,这里的systemd和kubelet配置文件里面的--cgroup-drive相同即可,否则kubelet启动报错

如图:

修改配置参数后,重启docker服务

systemctl restart docekr

3、安装kubelet工具及配置

kubelet是node节点安装的工具,我们依然从我们前面下载的server包的bin里面可以找到,同时还需要kube-proxy问,可以同时上传的文件夹的/usr/local/bin文件

并且赋予可执行权限。

注意事项:swap分区务必注释掉并重启服务器。

配置前我们需要现在master节点上执行如下操作,创建认证角色:

cd /etc/kubernetes
kubectl create clusterrolebinding kubelet-bootstrap   --clusterrole=system:node-bootstrapper   --user=kubelet-bootstrap

created成功后,我们回到node节点操作:

我们已经获得了bin文件,开始配置相应的服务器文件

添加配置文件kubelt:

cd /etc/kubernetes
cat > kubelet << EOF
###
## 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="--address=10.10.90.106"
#
## 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=10.10.90.106"
#
## location of the api-server
## COMMENT THIS ON KUBERNETES 1.8+
#KUBELET_API_SERVER="--api-servers=http://172.20.0.113:8080"
#
## pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=pause-amd64:3.0"
#
## Add your own!
KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig  --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local --hairpin-mode promiscuous-bridge --serialize-image-pulls=false"
EOF

说明:里面的ip地址都为node节点的ip地址,其他节点相应就好就好,注意KUBELET_API_SERVER已经在1.8的时候不用了。注释掉。

KUBELET_POD_INFRA_CONTAINER是指定pod运行的基础镜像,必须存在,我这里直接指定的是一个本地的镜像,镜像的或许地址为:
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
下载到本地后tag一下,方便使用,当然你也可以添加其他的公共pod基础镜像,在线地址也行,注意不要被墙就好。
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 pause-amd64:3.0
添加kubelt的服务文件/usr/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/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/local/bin/kubelet             $KUBE_LOGTOSTDERR             $KUBE_LOG_LEVEL             $KUBELET_API_SERVER             $KUBELET_ADDRESS             $KUBELET_PORT             $KUBELET_HOSTNAME             $KUBE_ALLOW_PRIV             $KUBELET_POD_INFRA_CONTAINER             $KUBELET_ARGS
Restart=on-failure

[Install]
WantedBy=multi-user.target

添加工作目录:不添加启动报错

mkdir /var/lib/kubelet

启动kubelt:

systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet

4、接受node请求

启动后,如果政策会自动向master节点发送验证加入请求,我们在master节点操作:

kubectl get csr 

#此命令可以看到所有请求,所有为pending状态,则是需要批准的

kubectl certificate approve 节点name

#此命令可以通过请求

我这是是已经approve过了,显示为approved和issued状态。就正常了

命令扩展:

kubectl delete csr 节点名称 #删除单个节点的请求

kubectl delete csr --all  #删除所有节点请求

kubectl  delete nodes  node名称  #删除加入的节点

kubectl  delete nodes --all   #删除所有节点

5、配置kube-proxy服务

现安装个工具conntrack,具体是干什么的还不是很清楚:

yum install -y conntrack-tools

创建 kube-proxy 的service配置文件,路径/usr/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_LOGTOSTDERR         $KUBE_LOG_LEVEL         $KUBE_MASTER         $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

添加配置文件/etc/kubernetes/proxy:内容为:

 proxy config

# default config should be adequate

# Add your own!
KUBE_PROXY_ARGS="--bind-address=10.10.90.106 --hostname-override=10.10.90.106 --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --cluster-cidr=10.254.0.0/16"

ip修改为本机ip即可。

注意事项:

--hostname-override 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node,从而不会创建任何 iptables 规则;
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 的权限;

启动proxy服务:

systemctl daemon-reload
systemctl enable kube-proxy
systemctl start kube-proxy
systemctl status kube-proxy

6、验证测试

我们可以创建一个nginx部署验证集群是否正常:

#delete是清理不用的所有pods,service和deployment,非必须执行
kubectl delete pods --all
kubectl delete service --all
kubectl delete deployment --all

这里以下是测试一个nginx集群部署的
1、定义集群并启动
kubectl run nginx --replicas=3 --labels="run=load-balancer-example" --image=nginx  --port=80
2、定义集群服务
kubectl expose deployment nginx --type=NodePort --name=example-service
3、查看服务信息
kubectl describe svc example-service4、查看pod状态,全为running既正常,否则使用kubectl describe pods {有问题的pod名称}       查看具体的报错。kubectl get pods

其他电脑访问node节点+ip是可以访问的,创建service的有其他类型可以选择。

 

原文地址:https://www.cnblogs.com/netsa/p/8279045.html

时间: 2024-08-08 02:54:21

Kubernetes(K8s)安装部署过程(六)--node节点部署的相关文章

手动安装K8s第六节:node节点部署-kubelet

部署kubelet1.准备二进制包[[email protected] ~]# cd /usr/local/src/kubernetes/server/bin/ [[email protected] bin]# scp kubelet kube-proxy k8snode1:/opt/kubernetes/bin/ [[email protected] bin]# scp kubelet kube-proxy k8snode2:/opt/kubernetes/bin/ 2.创建角色绑定[[ema

二进制安装kubernetes v1.11.2 (第十一章 node节点部署)

继续前一章部署. 十一.node节点部署 kubernetes node 节点运行了如下组件: flannel docker kubelet kube-proxy 11.1 部署flanneld 请参考 第五章 11.2 安装依赖包 centos: source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" ssh [email protected]

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. PS: 篇幅有点长,但是比较详细.比较全面 一.Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server.kubelet等等)需要相互通信的端口

Kubernetes集群部署之五node节点部署

部署kubelet: 1.二进制包准备 将软件包可执行文件从k8s-master复制到node节点中去. [[email protected] ~]# cd /usr/local/src/kubernetes/server/bin [[email protected]-master bin]# scp kubelet kube-proxy 10.200.3.106:/opt/kubernetes/bin/ [[email protected]-master bin]# scp kubelet k

三 node节点部署k8s组件

接着第二篇,master上面部署完了三个角色,接着部署node节点主要部署:kubelet kube-proxy 一 环境准备(以下都是在master上操作) 1建立目录,拷贝两个组件 mkdir /home/yx/kubernetes/{bin,cfg,ssl} -p # 两个node节点都拷贝 scp -r /home/yx/src/kubernetes/server/bin/kubelet [email protected]:/home/yx/kubernetes/bin scp -r /

k8s node节点部署(v1.13.10)

系统环境: node节点 操作系统: CentOS-7-x86_64-DVD-1908.iso node节点 IP地址: 192.168.1.204 node节点 hostname(主机名, 请和保持node节点主机名 和master不同):k8s.node03 目标: 在该机器安装k8s node节点,并加入指定集群 步骤如下: 1. 安装基础工具 yum install vim yum install lrzsz yum install dockersystemctl start docke

Kubernetes容器集群管理环境 - Node节点的移除与加入

一.如何从Kubernetes集群中移除Node 比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [[email protected]-master01 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-node01 Ready <none> 47d v1.14.2 k8s-node02 Ready <none> 47d v1.14.2 k8s-node03 R

openstack云计算(二):Openstack rocky 部署三 nova计算节点部署

Openstack 云计算(二): Openstack Rocky部署三 nova 部署与验证 (计算节点) 标签(空格分隔): openstack系列 一:nova计算节点初始化 二:nova 计算节点配置 一: nova计算节点初始化 1.1 配置主机名 login: 10.0.0.31 cat /etc/hosts --- 10.0.0.11 controller 10.0.0.31 computer1 10.0.0.41 block1 10.0.0.51 object1 10.0.0.5

k8s 安装 prometheus 过程记录

开始以为只要安装 prometheus-operator 就行了. git clone https://github.com/coreos/prometheus-operator.git cd prometheus-operator sed 's/namespace: default/namespace: monitoring/g' bundle.yaml | kubectl apply -f - 安装后发现只有一个 prometheus-operator pod . $ kubectl get