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方式安装的,修改方式如下:

  1. 修改docker的配置文件/usr/lib/systemd/system/docker.service,增加一条环境变量配置:
  2.  
  3. EnvironmentFile=-/run/flannel/docker
  4.  
  5. 同时为start添加一个参数 --exec-opt native.cgroupdriver=systemd,这里的systemdkubelet配置文件里面的--cgroup-drive相同即可,否则kubelet启动报错

如图:

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

  1. systemctl restart docekr

3、安装kubelet工具及配置

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

并且赋予可执行权限。

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

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

  1. cd /etc/kubernetes
  2. kubectl create clusterrolebinding kubelet-bootstrap \
  3. --clusterrole=system:node-bootstrapper \
  4. --user=kubelet-bootstrap

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

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

添加配置文件kubelt:

  1. cd /etc/kubernetes
  2. cat > kubelet << EOF
  3. ###
  4. ## kubernetes kubelet (minion) config
  5. #
  6. ## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
  7. KUBELET_ADDRESS="--address=10.10.90.106"
  8. #
  9. ## The port for the info server to serve on
  10. #KUBELET_PORT="--port=10250"
  11. #
  12. ## You may leave this blank to use the actual hostname
  13. KUBELET_HOSTNAME="--hostname-override=10.10.90.106"
  14. #
  15. ## location of the api-server
  16. ## COMMENT THIS ON KUBERNETES 1.8+
  17. #KUBELET_API_SERVER="--api-servers=http://172.20.0.113:8080"
  18. #
  19. ## pod infrastructure container
  20. KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=pause-amd64:3.0"
  21. #
  22. ## Add your own!
  23. 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"
  24. EOF

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

  1. KUBELET_POD_INFRA_CONTAINER是指定pod运行的基础镜像,必须存在,我这里直接指定的是一个本地的镜像,镜像的或许地址为:
  1. docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0

  2. 下载到本地后tag一下,方便使用,当然你也可以添加其他的公共pod基础镜像,在线地址也行,注意不要被墙就好。
  3. docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 pause-amd64:3.0
  1. 添加kubelt的服务文件/usr/lib/systemd/system/kubelet.service
    内容如下:
  1. [Unit]
  2. Description=Kubernetes Kubelet Server
  3. Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  4. After=docker.service
  5. Requires=docker.service
  6.  
  7. [Service]
  8. WorkingDirectory=/var/lib/kubelet
  9. EnvironmentFile=-/etc/kubernetes/config
  10. EnvironmentFile=-/etc/kubernetes/kubelet
  11. ExecStart=/usr/local/bin/kubelet \
  12. $KUBE_LOGTOSTDERR \
  13. $KUBE_LOG_LEVEL \
  14. $KUBELET_API_SERVER \
  15. $KUBELET_ADDRESS \
  16. $KUBELET_PORT \
  17. $KUBELET_HOSTNAME \
  18. $KUBE_ALLOW_PRIV \
  19. $KUBELET_POD_INFRA_CONTAINER \
  20. $KUBELET_ARGS
  21. Restart=on-failure
  22.  
  23. [Install]
  24. WantedBy=multi-user.target

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

  1. mkdir /var/lib/kubelet

启动kubelt:

  1. systemctl daemon-reload
  2. systemctl enable kubelet
  3. systemctl start kubelet
  4. systemctl status kubelet

4、接受node请求

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

  1. kubectl get csr
  2.  
  3. #此命令可以看到所有请求,所有为pending状态,则是需要批准的
  4.  
  5. kubectl certificate approve 节点name
  6.  
  7. #此命令可以通过请求

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

命令扩展:

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

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

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

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

5、配置kube-proxy服务

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

  1. yum install -y conntrack-tools

创建 kube-proxy 的service配置文件,路径/usr/lib/systemd/system/kube-proxy.service,内容:

  1. [Unit]
  2. Description=Kubernetes Kube-Proxy Server
  3. Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  4. After=network.target
  5.  
  6. [Service]
  7. EnvironmentFile=-/etc/kubernetes/config
  8. EnvironmentFile=-/etc/kubernetes/proxy
  9. ExecStart=/usr/local/bin/kube-proxy \
  10. $KUBE_LOGTOSTDERR \
  11. $KUBE_LOG_LEVEL \
  12. $KUBE_MASTER \
  13. $KUBE_PROXY_ARGS
  14. Restart=on-failure
  15. LimitNOFILE=
  16.  
  17. [Install]
  18. WantedBy=multi-user.target

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

  1. proxy config
  2.  
  3. # default config should be adequate
  4.  
  5. # Add your own!
  6. 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服务:

  1. systemctl daemon-reload
  2. systemctl enable kube-proxy
  3. systemctl start kube-proxy
  4. systemctl status kube-proxy

补充知识点:

  1. 有关node节点名称修改:
  2.  
  3. master上通过kubectl get node 获得的列表中,Name显示的名称是通过 客户端kubeletproxy配置文件中hostname-override配置参数定义的,修改这2个参数为你想要的名称,并且删除kubelet.kubeconfig(这个文件是master认证后客户端自动生成的,如果不删除会报node节点forbidden)文件,重新启动着2个服务,master端重新
  4. kubectl certificate approve name名称 就可以看到新名称。

修改配置文件,不删除kubelet.kubeconfig文件会报错误:

  1. kubelet_node_status.go:] Unable to register node "node2" with API server: nodes "node2" is forbidden: node "10.10.90.107" cannot modify node "node2"

6、验证测试

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

  1. #delete是清理不用的所有pods,service和deployment,非必须执行
  2. kubectl delete pods --all
  3. kubectl delete service --all
  4. kubectl delete deployment --all
  5.  
  6. 这里以下是测试一个nginx集群部署的
  7. 、定义集群并启动
  8. kubectl run nginx --replicas= --labels="run=load-balancer-example" --image=nginx --port=
  9. 、定义集群服务
  10. kubectl expose deployment nginx --type=NodePort --name=example-service
  11. 、查看服务信息
  12. kubectl describe svc example-service
    4、查看pod状态,全为running既正常,否则使用kubectl describe pods {有问题的pod名称} 查看具体的报错。
    kubectl get pods

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

  1.  
  2. 再次提醒我后面的node节点是按照3台来装的,跟初始的设计不太一样,只不过不master也当成一台node了,到这里一个基本的集群就完成了,后面的还有辅助工具dns和图形化展示等功能,这两天慢慢补充。

Kubernetes1.91(K8s)安装部署过程(六)--node节点部署的更多相关文章

  1. K8s集群部署(三)------ Node节点部署

    之前的docker和etcd已经部署好了,现在node节点要部署二个服务:kubelet.kube-proxy. 部署kubelet(Master 节点操作) 1.二进制包准备 [root@k8s-m ...

  2. 二进制部署1.23.4版本k8s集群-6-部署Node节点服务

    本例中Master节点和Node节点部署在同一台主机上. 1 部署kubelet 1.1 集群规划 主机名 角色 IP CFZX55-21.host.com kubelet 10.211.55.21 ...

  3. 三、安装并配置Kubernetes Node节点

    1. 安装并配置Kubernetes Node节点 1.1 安装Kubernetes Node节点所需服务 yum -y install kubernetes   通过yum安装kubernetes服 ...

  4. k8s 安装 prometheus 过程记录

    开始以为只要安装 prometheus-operator 就行了. git clone https://github.com/coreos/prometheus-operator.git cd pro ...

  5. k8s node节点部署(v1.13.10)

    系统环境: node节点 操作系统: CentOS-7-x86_64-DVD-1908.iso node节点 IP地址: 192.168.1.204 node节点 hostname(主机名, 请和保持 ...

  6. 在node节点部署kubectl管理k8s集群

    感谢!原文链接:https://blog.csdn.net/sinat_35930259/article/details/79994078 kubectl是k8s的客户端程序,也是k8s的命令行工具, ...

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

    Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...

  8. Node节点部署

    一.部署kubelect 二进制包准备 将软件包从linux-node1复制到linux-node2.linux-node3中去 [root@linux-node1 ~]# cd /usr/local ...

  9. kubernetes Node节点部署(四)

    一.部署kubelet 1.1.二进制包准备 将软件包从linux-node1复制到linux-node2中去 [root@linux-node1 ~]# cd /usr/local/src/kube ...

随机推荐

  1. 了解java虚拟机—JVM相关参数设置(2)

    1.   JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使 ...

  2. 奇妙的数字-2015省赛C语言A组第三题

    奇妙的数字 小明发现了一个奇妙的数字.它的平方和立方正好把0~9的10个数字每个用且只用了一次.你能猜出这个数字是多少吗? 请填写该数字,不要填写任何多余的内容.

  3. ActivityManagerService原理&源码

    https://www.kancloud.cn/alex_wsc/android-deep2/413386 http://wiki.jikexueyuan.com/project/deep-andro ...

  4. Java - Thread 和 Runnable实现多线程

    Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过jav ...

  5. 使用PHPExcel实现数据批量导出为excel表格

    首先需要下载PHPExecel类文件,帮助文档可以参考PHPExcel中文帮助手册|PHPExcel使用方法. 下面直接上例子,是我自己写的一个简单的批量导出数据为excel的例子 前台页面 比较简单 ...

  6. BZOJ3351: [ioi2009]Regions(根号分治)

    题意 题目链接 Sol 很神仙的题 我们考虑询问(a, b)(a是b的祖先),直接对b根号分治 如果b的出现次数\(< \sqrt{n}\),我们可以直接对每个b记录下与它有关的询问,这样每个询 ...

  7. 自定义data-*

    HTML5的自定义属性data-*详细介绍和JS操作实例 < div id="user" data-id="123456" data-name=" ...

  8. X86和X64环境下的基本类型所占用的字节大小

    同样的程序代码,使用Visual Studio 进行编译,当目标平台分别为x86或x64环境时,其编译结果是不同的.在x86环境下,指针都是4个字节的:而在x64环境下,指针都是8字节的.测试代码如下 ...

  9. jQuery首页更换背景皮肤

    昨天做了一个jQuery首页更换背景皮肤,感觉还是挺不错的,一共需要两个文件,一个是我们写的HTML文件,我们起名叫做index.html,一个是我们引入的jQuery文件,我们起名叫做jQuery. ...

  10. 关于form表单提交到Servlet的时候出现tomcat启动错误的解决方法

    1.遇到的问题 今天在写jsp代码的时候通过form表单提交到Servlet的时候出现的tomcat启动错误,琢磨了半天,终于找到了解决方法. 解决问题的关键就在于xml配置的路径和servlet中默 ...