k8s 中加入新node

今天在家实践了向k8s master 中加入新的node: test3  (主要就是安装docker, kubelet,kube-proxy)

部署规划

192.168.122.152   k8s-master

192.168.122.153   test3

---

1.关闭防火墙

$ systemctl stop firewalld

备注:必须关闭

2.关闭selinux

$ setenforce 0

3.关闭swap

$ swapoff -a    临时关闭

$ free             可以通过这个命令查看swap是否关闭了

$ vim /etc/fstab  永久关闭

#/dev/mapper/centos_k8s--master-swap swap                    swap    defaults        0 0

备注:必须关闭

4.添加主机名与IP对应的关系

$ vim /etc/hosts

 添加如下内容:

192.168.122.152     k8s-master

192.168.122.153     test3

5.将桥接的IPV4流量传递到iptables 的链

$ cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

$ sysctl --system

6.安装Docker

1)下载并安装

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo

$ yum -y install docker-ce-18.06.1.ce-3.el7

2)设置开机启动  

$ systemctl enable docker

$ systemctl start docker

3)查看Docker版本

$ docker --version

Docker version 18.06.1-ce, build e68fc7a

7.添加阿里云YUM软件源

直接执行如下命令    

cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

8.安装kubeadm,kubelet和kubectl

在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。

yum -y install kubectl kubelet kubeadm

报如下的错:

Importing GPG key 0xA7317B0F:
 Userid     : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>"
 Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f
 From       : https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

Public key for 26d3e29e517cb0fd27fca12c02bd75ffa306bc5ce78c587d83a0242ba20588f0-kubectl-1.16.2-0.x86_64.rpm is not installed

 Failing package is: kubectl-1.16.2-0.x86_64
 GPG Keys are configured as: https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

原因是key 校验,下面的命令可以成功:

[root@k8s-master ~]# yum install -y kubelet kubeadm kubectl --nogpgcheck

$ systemctl enable kubelet

加入启动项; kubelet
 

9.Node节点加入集群

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:[root@k8s-master ~]# kubeadm token list
TOKEN     TTL       EXPIRES   USAGES    DESCRIPTION   EXTRA GROUPS
[root@k8s-master ~]# kubeadm token create
8r77xa.6lj7qhsiyw74f0up
复制上面命令,在node节点上执行

[root@k8s-node ~]# kubeadm join 192.168.122.152:6443 --token 8r77xa.6lj7qhsiyw74f0up \

>     --discovery-token-ca-cert-hash sha256:e9205bf68357eb190c5a7fda5e782d7533c361d0298093b6f283cc6886ad0b4e

[root@k8s-node ~]# kubeadm join 192.168.122.152:6443 --token blp5os.k5jjk54o61txnree \
>     --discovery-token-ca-cert-hash sha256:e9205bf68357eb190c5a7fda5e782d7533c361d0298093b6f283cc6886ad0b4e
[preflight] Running pre-flight checks
    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.16" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

[root@k8s-node ~]#

出现上面的就说已经成功了。

如果token忘记了,则可以通过如下操作:

1)查看token,如果token失效,则重新生成一个

$ kubeadm token list

$ kubeadm token create

2)获取ca证书sha256编码hash值

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

3)节点加入集群

$ kubeadm reset<br>$ kubeadm join 192.168.122.152:6443 --token 8r77xa.6lj7qhsiyw74f0up \ --discovery-token-ca-cert-hash sha256:8b79b6461e58c07333cb2851fe74fd4374af8bbbe0bf7e040b415b86ad4fb89d

10 检查一下node status:

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE    VERSION
k8s-master   Ready      master   128d   v1.16.2
k8s-node     Ready      <none>   127d   v1.16.2
test3        NotReady   <none>   41m    v1.17.3

发现notReady, 下面来研究一下。

看了kubectl describe node 发现:

runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized, CSINodeInfo is not yet initialized

网上看了解决方法是:

在:node 节点上:/var/lib/kubelet/kubeadm-flags.env

[root@test3 kubelet]# cat kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1"

把上面红色的部分去掉。然后restart kubelet:

systemctl start kubelet

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
k8s全自动离线部署(高可用),百度下载连接(永久有效,且免费) 当前可选安装版本----------------------------------------------------------------------------------------------------------------------------------------- Kubernetes 1.16.2  -->Docker版本18.09.7-3、18.09.8-3、18.09.9-3、19.03.0-3、19.03.1-3、19.03.2-3、19.03.3-3、19.03.4-3 Kubernetes 1.15.4  -->Docker版本18.09.7-3、18.09.8-3、18.09.9-3、19.03.0-3、19.03.1-3、19.03.2-3、19.03.3-3、19.03.4-3 Kubernetes 1.15.3  -->Docker版本18.09.7-3、18.09.8-3、18.09.9-3、19.03.0-3、19.03.1-3、19.03.2-3、19.03.3-3、19.03.4-3 当前---------------------------------------------------------------------------------------------------------------------------------------------------- 版本:kubernetes(k8s)离线自动化安装系统-v2.6(基于CentOS7.4/7.5/7.6/7.7版本) 升级内容: 1、增加多master集群节点部署功能,即配置文件configs/k8shostlist.ini支持多master节点集群加入 2、增加etcd集群分离部署支持,通过systemctl进行管理,即配置文件configs/etcdhostlist.ini支持多master节点集群加入。 3、经过测试,所有master、node节点依次注入停机故障进行测试,所有业务pod实现100%正常漂移,漂移过程,出现业务服务响应延时增加现象,但无业务响应异常发生。 4、此版本实现100%一键安装,安装前,整理好配置文件,上传安装包到初始安装主机,直接执行安装脚本,无需任何其他手动处理,即可完成etcd、k8s集群环境搭建。 5、此版本实现了除dockerhub外,所有关键模块,无单点的解决方案。 6、此版本高可用解决方案,对于apiServer的endpoint(k8s.master.com:6443),通过配置/etc/hosts(域名:IP,1:n)模拟VIP, 生产环境下,可以给集群内所有master节点分配一个VIP(k8s.master.com),以避免软负载的流量风暴影响运行稳定性 历史---------------------------------------------------------------------------------------------------------------------------------------------------- 版本:kubernetes(k8s)离线自动化安装系统-v2.5(基于CentOS7.4/7.5/7.6/7.7版本) 升级内容: 1、增加traefik部署以及相关资源创建,除master节点外,其余node节点默认开启服务访问权限 2、demo同时支持ingress和NodePort两种服务发布模式。分别通过虚拟域名+path和NodePort端口即可方案demo服务 3、实现k8s已发布service自动发现和适配能力,在线看板实时动态显示 4、主要模块开机自启动脚本优化,以确保集群所有节点重启后,所有服务运行正常 历史---------------------------------------------------------------------------------------------------------------------------------------------------- 版本:K8s离线自动化安装系统-v2.4(基于CentOS7.4及以上版本) 升级内容: 1、私服镜像仓库搭建支撑harbor、docker-registry 2、安装配置,增加私服镜像仓库端口配置,harbor的admin用户密码配置 3、安装进度条,Ctrl+C支持强制退出,支持保持安装进度和卸载 4、安装帮助文档、使用帮助文档更 历史---------------------------------------------------------------------------------------------------------------------------------------------------- 版本:K8s离线自动化安装系统-v2.3(基于CentOS7.4及以上版本) 升级内容: 1、增加监控模块heapster部署和配置 2、部署kubernetesui/dashboard最版 3、授权serviceAccount:dashboard账户获取最大访问权限,满足dashboardUI操作需要 4、安装完成界面,增加dashboard访问URL提示,以及登录dashboard门户的账户token 历史----------------------------------------------------------------------------------------------------------------------------------------------------
一、安装准备: 1.环境 主机名 IP k8s-master 192.168.250.111 k8s-node01 192.168.250.112 k8s-node02 192.168.250.116 2.设置主机名 hostnamectl --static set-hostname k8s-master hostnamectl --static set-hostname k8s-node01 hostnamectl --static set-hostname k8s-node02 3.关闭防火墙和selinux systemctl disable firewalld systemctl stop firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 执行完成后重启虚拟机。 4.在master机器上安装ansible 执行命令:sudo yum install ansible (离线处理补充) 5.配置 ansible ssh密钥登录,此操作需要在所有机器上执行 ssh-keygen -t rsa -b 2048 回车 回车 回车 ssh-copy-id $IP #$IP为所有虚拟机,按照提示输入yes 和root密码 (密钥补充) 二、安装kubernetes集群 进入ansible安装路径 : cd /etc/ansible 将路径下的roles文件夹和hosts文件删除。 解压压缩文件kubeasz.zip文件,将解压后的内容放入当前目录下(/etc/ansible) 根据搭建集群环境要求,进入/etc/ansible/example 目录下选取 hosts.allinone.example 单节点AllInOne hosts.m-masters.example 单主多节点 hosts.s-master.example 多主多节点 红色标记的是需要自行修改的地方 修改完成后将文件名改为hosts 放入/etc/ansible/目录下。 安装prepare ansible-playbook 01.prepare.yml 安装etcd ansible-playbook 02.etcd.yml 安装kubectl命令 ansible-playbook 03.kubectl.yml 安装docker ansible-playbook 04.docker.yml 如果执行时出现报错: 可忽略。 解决方法: 在master节点上执行:curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 所有机器上执行: wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum install jq -y 在重执行: ansible-playbook 04.docker.yml 安装calico ansible-playbook 05.calico.yml 部署master节点 ansible-playbook 06.kube-master.yml 加入node节点 ansible-playbook 07.kube-node.yml 如果执行成功,k8s集群就安装好了。 三、验证安装 如果提示kubectl: command not found,退出重ssh登陆一下,环境变量生效即可 kubectl version #查看kubernetes版本 kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等组件 Healthy kubectl cluster-info # 可以看到kubernetes master(apiserver)组件 running kubectl get node # 可以看到单 node Ready状态 kubectl get pod --all-namespaces # 可以查看所有集群pod状态 kubectl get svc --all-namespaces # 可以查看所有集群服务状态 calicoctl node status # 可以在master或者node节点上查看calico网络状态 四、安装主要组件 安装kubedns kubectl create -f manifests/kubedns 安装heapster kubectl create -f manifests/heapster 安装dashboard kubectl create -f manifests/dashboard 访问dashboard 先执行命令查看dashboard的NodePort 端口 kubectl get svc -n kube-system 访问web页面 https://masterIP: 7443 选择令牌按钮 ,用命令查询登录令牌 之前安装过 heapster 执行命令:kubectl get secret -n kube-system 查询 heapster-token-twpw4 的详细内容 执行命令:kubectl describe secret heapster-token-twpw4 -n kube-system Token就是登录令牌,复制登录就好了 安装ingress kubectl create -f manifests/ingress/ 安装EFK(elasticsearch+ fluentd + kibana) 首先进入 manifests/EFK 文件夹下 (cd /etc/ansible/manifests/EFK) 查看并修改 ceph-sercet.yaml 文件。 此key值是 ceph存储用户的token值 ,将此key值转换为base64 将文件红色选选部分修改为转换后的值。 修改完成后 部署 pv 和 pvc 执行命令:kubectl create -f es-pv-data.yaml kubectl create -f es-pvc-data.yaml 部署fluentd 执行命令:kubectl create -f fluentd-rbac.yml -f fluentd-configmap.yml -f fluentd-daemonset.yml 部署elasticsearch 先设置node节点role ,指定master client data 部署位置 执行命令:kubectl get nodes kubectl label node 10.2.0.244 role=master (10.2.0.244 是我本机kubernetes 的master节点 ,所以我也将此master也部署在这里) 其余的两个节点分别是data 和 client 执行命令:kubectl create -f es-discovery-svc.yaml -f es-svc.yaml -f es-master.yaml -f es-client.yaml -f es-data.yaml 其部署elasticsearch集群需要注意一些事项 : Master节点一般只有一个 并且提供9300 端口 客户端通讯使用 Client 节点一般提供9200端口 用于连接kibana 和 fluentd http访问使用 Data 节点是提供数据存储,持久化对data节点进行就可以。 其 master , client , data 部署文件 配置的 CLUSTER_NAME 指的是 elasticsearch集群名称 Java运行自行设置,最大值和最小值需要一致。 最小为-Xms256m 部署kibana 执行命令:kubectl create -f kibana-svc.yaml -f kibana.yaml 这里需要注意 kibana.yaml 文件 参数的设置 这里的CLUSTER_NAME 也是elasticsearch部署文件设置的集群名称。 #安装 flannel 执行命令: cd /etc/ansible/roles/flannel 先修改kube-flannel.yml文件 --iface 对应的是本机的网卡名称 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ] 修改完成后 执行: kubectl create -f kube-flannel-rbac.yml kubectl apply -f kube-flannel.yml

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenghuiping2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值