之前的docker和etcd已经部署好了,现在node节点要部署二个服务:kubelet、kube-proxy。

 

部署kubelet(Master 节点操作)

1.二进制包准备

[root@k8s-master bin]# cd /usr/local/src/kubernetes/server/bin/
[root@k8s-master bin]# cp kubelet kube-proxy /opt/kubernetes/bin/
[root@k8s-master bin]# scp kubelet kube-proxy 10.0.3.226:/opt/kubernetes/bin/
[root@k8s-master bin]# scp kubelet kube-proxy 10.0.3.227:/opt/kubernetes/bin/

2.创建角色绑定

[root@k8s-master bin]#  kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
clusterrolebinding.rbac.authorization.k8s.io "kubelet-bootstrap" created

3.创建 kubelet bootstrapping kubeconfig 文件 设置集群参数

[root@k8s-master bin]# cd /usr/local/src/ssl/
[root@k8s-master ssl]# kubectl config set-cluster kubernetes \
> --certificate-authority=/opt/kubernetes/ssl/ca.pem \
> --embed-certs=true \
> --server=https://10.0.3.225:6443 \
> --kubeconfig=bootstrap.kubeconfig
Cluster "kubernetes" set.

4.设置客户端认证参数

[root@k8s-master ssl]# kubectl config set-credentials kubelet-bootstrap \
> --token=4c7d89749d1e1a15e5fe55eb5e8446ec \
> --kubeconfig=bootstrap.kubeconfig
User "kubelet-bootstrap" set.

注意这个token是部署API Server时生成的

[root@k8s-master ssl]# grep 'token' /usr/lib/systemd/system/kube-apiserver.service
--enable-bootstrap-token-auth \
--token-auth-file=/opt/kubernetes/ssl/bootstrap-token.csv \
[root@k8s-master ssl]# cat /opt/kubernetes/ssl/bootstrap-token.csv
4c7d89749d1e1a15e5fe55eb5e8446ec,kubelet-bootstrap,,"system:kubelet-bootstrap"

5.设置上下文参数

[root@k8s-master ssl]# kubectl config set-context default \
> --cluster=kubernetes \
> --user=kubelet-bootstrap \
> --kubeconfig=bootstrap.kubeconfig
Context "default" created.

6.选择默认上下文

[root@k8s-master ssl]# kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
Switched to context "default".

敲一堆命令就是为了生成 bootstrap.kubeconfig 这个文件,每加一个节点都需要把这个文件拷贝过去

[root@k8s-master ssl]# cat bootstrap.kubeconfig
[root@k8s-master ssl]# cp bootstrap.kubeconfig /opt/kubernetes/cfg
[root@k8s-master ssl]# scp bootstrap.kubeconfig 10.0.3.226:/opt/kubernetes/cfg
[root@k8s-master ssl]# scp bootstrap.kubeconfig 10.0.3.227:/opt/kubernetes/cfg

部署kubelet(Node 节点操作)

1.设置CNI支持

[root@k8s-node1 ~]#  mkdir -p /etc/cni/net.d
[root@k8s-node1 ~]# vim /etc/cni/net.d/-default.conf
{
"name": "flannel",
"type": "flannel",
"delegate": {
"bridge": "docker0",
"isDefaultGateway": true,
"mtu":
}
}

2.创建kubelet数据目录

[root@k8s-node1 ~]# mkdir /var/lib/kubelet

3.创建kubelet服务配置

[root@k8s-node1 ~]#  vim /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service [Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/opt/kubernetes/bin/kubelet \
--address=10.0.3.226 \    #注意修改IP地址
--hostname-override=10.0.3.226 \        #注意修改IP地址
--pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.0 \
--experimental-bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
--cert-dir=/opt/kubernetes/ssl \
--network-plugin=cni \
--cni-conf-dir=/etc/cni/net.d \
--cni-bin-dir=/opt/kubernetes/bin/cni \
--cluster-dns=10.1.0.2 \
--cluster-domain=cluster.local. \
--hairpin-mode hairpin-veth \
--allow-privileged=true \
--fail-swap-on=false \
--logtostderr=true \
--v= \
--logtostderr=false \
--log-dir=/opt/kubernetes/log
Restart=on-failure
RestartSec=

4.启动Kubelet

[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl enable kubelet
[root@k8s-node1 ~]# systemctl start kubelet #查看服务状态
[root@k8s-node1 ~]# systemctl status kubelet #如果启动失败,执行journalctl -xefu kubelet 查看日志。

5.查看csr请求 注意是在Mastrt上执行。

[root@k8s-master ssl]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-ZIu6TBO8uO4jf7siY840IaGWk5lPrgRBZvZz5vz2-OM 15m kubelet-bootstrap Pending

7.在Master管理节点 批准kubelet 的 TLS 证书请求

[root@k8s-master ~]# kubectl get csr|grep 'Pending' | awk 'NR>0{print $1}'| xargs kubectl certificate approve

通过请求后查看node状态。

[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.3.226 Ready <none> 4h v1.10.1
10.0.3.227 Ready <none> 22s v1.10.1

在Node节点会自动生成证书文件

[root@k8s-node2 cfg]# ls  -l /opt/kubernetes/ssl/kubelet*
-rw-r--r-- root root Nov : /opt/kubernetes/ssl/kubelet-client.crt
-rw------- root root Nov : /opt/kubernetes/ssl/kubelet-client.key
-rw-r--r-- root root Nov : /opt/kubernetes/ssl/kubelet.crt
-rw------- root root Nov : /opt/kubernetes/ssl/kubelet.key

部署Kubernetes Proxy

1.配置kube-proxy使用LVS(Node节点都要安装)

[root@k8s-node1 ssl]# yum install -y ipvsadm ipset conntrack

2.创建 kube-proxy 证书请求(在Master节点创建)

[root@k8s-master ~]# cd /usr/local/src/ssl/
[root@k8s-master ssl]# vim kube-proxy-csr.json
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size":
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}

3.生成证书

[root@k8s-master ssl]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
> -ca-key=/opt/kubernetes/ssl/ca-key.pem \
> -config=/opt/kubernetes/ssl/ca-config.json \
> -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

4.分发证书到所有Node节点

[root@k8s-master ssl]# cp kube-proxy*.pem  /opt/kubernetes/ssl/
[root@k8s-master ssl]# scp kube-proxy*.pem 10.0.3.226:/opt/kubernetes/ssl/
[root@k8s-master ssl]# scp kube-proxy*.pem 10.0.3.227:/opt/kubernetes/ssl/

5.创建kube-proxy配置文件,(在Master节点创建,之后分发到Node节点)

[root@k8s-master ssl]# kubectl config set-cluster kubernetes \
--certificate-authority=/opt/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://10.0.3.225:6443 \
--kubeconfig=kube-proxy.kubeconfig
Cluster "kubernetes" set.
[root@k8s-master ssl]# kubectl config set-credentials kube-proxy \
--client-certificate=/opt/kubernetes/ssl/kube-proxy.pem \
--client-key=/opt/kubernetes/ssl/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
User "kube-proxy" set.
[root@k8s-master ssl]# kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
Context "default" created.
[root@k8s-master ssl]# kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Switched to context "default".

6.分发kubeconfig配置文件

[root@k8s-master ssl]# cp kube-proxy.kubeconfig /opt/kubernetes/cfg/
[root@k8s-master ssl]# scp kube-proxy.kubeconfig 10.0.3.226:/opt/kubernetes/cfg/
[root@k8s-master ssl]# scp kube-proxy.kubeconfig 10.0.3.227:/opt/kubernetes/cfg/

7.创建kube-proxy服务配置(Node节点操作)

[root@k8s-node1 ~]# mkdir /var/lib/kube-proxy
[root@k8s-node1 ~]# vim /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target [Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/opt/kubernetes/bin/kube-proxy \
--bind-address=10.0.3.226 \
--hostname-override=10.0.3.226 \
--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig \
--masquerade-all \
--feature-gates=SupportIPVSProxyMode=true \
--proxy-mode=ipvs \
--ipvs-min-sync-period=5s \
--ipvs-sync-period=5s \
--ipvs-scheduler=rr \
--logtostderr=true \
--v= \
--logtostderr=false \
--log-dir=/opt/kubernetes/log Restart=on-failure
RestartSec=
LimitNOFILE= [Install]
WantedBy=multi-user.target

8.启动Kubernetes Proxy

[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl enable kube-proxy
[root@k8s-node1 ~]# systemctl start kube-proxy #查看服务状态
[root@k8s-node1 ~]# systemctl status kube-proxy
[root@k8s-node1 ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.0.1: rr persistent
-> 10.0.3.225: Masq

Node节点上 Kubernetes Proxy、kubelet都启动正常,K8S集群就部署完成了。接下来就是Flannel网络部署。

K8s集群部署(三)------ Node节点部署的更多相关文章

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

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

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

    一.如何从Kubernetes集群中移除Node比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [root@k8s-master01 ~]# ...

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

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

  4. 二进制部署1.23.4版本k8s集群-5-部署Master节点服务

    1.安装Docker 在21.22.200三台机器上安装Docker.安装命令: 在21.22.200三台主机上部署Docker. ~]# curl -fsSL https://get.docker. ...

  5. 使用kubeadm安装k8s集群故障处理三则

    最近在作安装k8s集群,测试了几种方法,最终觉得用kubeadm应该最规范. 限于公司特别的网络情况,其安装比网上不能访问google的情况还要艰难. 慢慢积累经验吧. 今天遇到的三则故障记下来作参考 ...

  6. k8s集群---apiserver,controller-manager,scheduler部署

    #证书自签名脚本 root@k8s-master: ~/k8s/k8s-cert :: $ cat k8s-cert.sh cat > ca-config.json <<EOF { ...

  7. centos8平台redis cluster集群添加/删除node节点(redis5.0.7)

    一,当前redis cluster的node情况: 我们的添加删除等操作都是以这个cluster作为demo cluster采用六台redis,3主3从 redis1 : ip: 172.17.0.2 ...

  8. kubernetes容器集群管理创建node节点kubeconfig文件

    1.创建TLS Bootstrapping Token 2.创建kubelet kubeconfig 3.创建kube-proxy kubeconfig 安装和设置kubectl [root@mast ...

  9. k8s集群移除node

    先drain节点上的pod 使用kubectl drain node03 --delete-local-data --force --ignore-daemonsets 之后删除node [root@ ...

  10. kubernetes实战-交付dubbo服务到k8s集群(三)安装配置maven和java运行时环境的底包镜像

    maven 官方地址: 官方地址 下载maven,shdd7-200 # cd /opt/src # wget https://archive.apache.org/dist/maven/maven- ...

随机推荐

  1. WPF C# 多屏情况下,实现窗体显示到指定的屏幕内

    原文:WPF C# 多屏情况下,实现窗体显示到指定的屏幕内 针对于一个程序,需要在两个显示屏上显示不同的窗体,(亦或N个显示屏N个窗体),可以使用如下的方式实现. 主要涉及到的:System.Wind ...

  2. Kitto2 now with free opensource Kide2 since September 2017(提供Web解决方案,大概是觉得Mobile开发快差不多了)

    Kitto2 is a tool for data-driven web application Development. It allows to create Rich Internet Appl ...

  3. ANDROID-BOOTSTRAP开源项目使用方法

    1.将程序导入到工作空间,修改target=android-XX为本地android SDK版本. 2.在项目中点击右键选择Properties->Android Library,添加ANDRO ...

  4. Centos下一个server安装的版本号mysql

    首先这里说的是这里的路径.以及语句都是在网上看了非常多错误后自己实践后改动过来的,希望对大家实用. 这里在安装的时候要按着我的这个顺序.否则可能会由于路径错误而找不到对应的指令. 一.安装cmake ...

  5. Base64实现测试,不要太相信apache-common的性能

    针对三种Base64实现: * 自已实现的 * JDK8的java.util.Base64 * apache-common的org.apache.commons.codec.binary.Base64 ...

  6. VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...

  7. MVC HttpUtility.HtmlEncode是如何编码的

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...

  8. CentOS7下Docker安装

    Docker现在有CE和EE版本 , CE版本是免费版本 , 该文档安装的就是CE版本 1.删除旧版本docker 保险起见 , 走流程 yum remove docker \ docker-clie ...

  9. mysql8解压版安装

    1.下载 下载mysql8 2.安装 ① 解压到需要安装的目录,然后新建一个my.ini(位于解压目录下,与bin目录在同一个目录下) # For advice on how to change se ...

  10. Westciv Tools主要为CSS3提供了渐变gradients、盒子阴影box-shadow、变形transform和文字描边四种在线生成效果的工具

    Westciv Tools主要为CSS3提供了渐变gradients.盒子阴影box-shadow.变形transform和文字描边四种在线生成效果的工具 1.Westciv Tools 彩蛋爆料直击 ...