Centos7下部署k8s集群-程序员宅基地

技术标签: kubernetes  k8s  docker  

Centos7下部署k8s集群

1.环境准备
角色/主机名 ip
k8s-master 192.168.132.155
k8s-node1 192.168.132.156
2.基础设置
2.1 关闭防火墙(master/node操作)
systemctl stop firewalld && systemctl disable firewalld

2.2 关闭selinux(master/node操作)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.3 关闭swap(必须)(master/node操作)
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab

2.4 配置时间同步(这里我直接和master进行同步)

在这里插入图片描述

2.5 配置内核参数(master/node操作)

将桥接的IPV4流量传递到iptables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl  --system

3.安装docker(master/node操作)
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
systemctl enable docker && systemctl start docker

4.添加阿里云yum软件源(master/node操作)
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

5.安装kubeadm,kubelet和kubectl(master/node操作)
5.1 各组件作用
kubelet # 运行在 Cluster 所有节点上,负责启动 Pod 和容器。

kubeadm # 用于初始化 Cluster。

kubectl # 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
  • 在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。
  • 我们需要安装指定版本的kubernetes。那么如何做呢?在进行yum安装时,可以使用下列的格式来进行安装:
  • yum install -y kubelet- kubectl- kubeadm-
5.2 安装(master/node操作)
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0
systemctl enable kubelet  #在这里只需enable,不用start

6.部署kubernetes Master(此步只在master上操作)
6.1 初始化kubeadm (master操作)
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

解释:

  • –apiserver-advertise-address=192.168.132.155 #集群通告地址,填写master物理网卡地址
  • –image-repository #指定阿里云镜像仓库地址(#指定从什么位置拉取镜像,默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers)
  • –kubernetes-version v1.19.0 #k8s版本,与上面安装版本一致
  • –service-cidr=10.1.0.0/16 #集群内部虚拟网络,指定Cluster IP的网段
  • –pod-network-cidr=10.244.0.0/16 #指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
  • –ignore-preflight-errors=all #忽略安装过程中的一些错误

备注:初始化出错的时候,想要重新做执行kubeadm reset

初始化执行的时候,出现错误:

报错1:
Aug  6 21:14:41 localhost kubelet: E0806 21:14:41.164994   72318 server.go:294] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""
Aug  6 21:14:41 localhost systemd: kubelet.service: main process exited, code=exited, status=1/FAILURE
Aug  6 21:14:41 localhost systemd: Unit kubelet.service entered failed state.
Aug  6 21:14:41 localhost systemd: kubelet.service failed.
Aug  6 21:14:41 localhost systemd: Stopped kubelet: The Kubernetes Node Agent.

解决报错1方案:

原因:docker和k8s使用的cgroup不一致导致
说明:可以只修改docker,docker不再设置native.cgroupdriver=systemd,或将systemd改成cgroupfs,改成和k8s一样(k8s默认是cgroupfs,但是他竟然推荐用systemd,上文报错中可看出)。

1.echo y | kubeadm reset #重置
2. cat /etc/docker/daemon.json #更改docker cgroupdirver为systemd
{
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
                 "max-size": "100m"
        },
        "storage-driver": "overlay2",
        "storage-opts": [
        "overlay2.override_kernel_check=true"
        ],
        "data-root": "/data/docker"
}
3. cat > /var/lib/kubelet/config.yaml <<EOF  #更改kubelet croupdriver为systemd
> apiVersion: kubelet.config.k8s.io/v1beta1
> kind: KubeletConfiguration
> cgroupDriver: systemd
> EOF
4.systemctl daemon-reload #重启服务
  systemctl restart docker
  systemctk restart kubelet
5.重新执行初始化
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

执行成功:

在这里插入图片描述

最后一段保存下来,后续添加节点会用到:kubeadm join 192.168.132.155:6443 --token b3dsrl.hqw7s4ew9n6setrl \ --discovery-token-ca-cert-hash sha256:aac25e1d77c5550fe2fb6491758597eb555a349dfb3f80ee37833ecb075c75d2

报错2:
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error

解决报错2方案:发现和报错1是同一个问题

6.2 使用kubectl工具 (master操作)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

下面就可以使用kubectl工具了

在这里插入图片描述

node节点为NotReady,因为coredns pod没有启动,缺少网络pod。

在这里插入图片描述
在这里插入图片描述

7.安装calico网络 (master操作)
wget https://docs.projectcalico.org/manifests/calico.yaml
vi calico.yaml

修改里面定义Pod网络(CALICO_IPV4POOL_CIDR)那行,该值与Kubeadm init指定的–pod-network-cidr需一致

在这里插入图片描述

在这里插入图片描述

过一会再查看信息,节点已经处于Ready状态了。
在这里插入图片描述

再次查看ndoe,状态已经为ready

在这里插入图片描述

8.将node节点加入集群(所有node节点操作)
  • 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
  • 复制上面命令,在node节点上执行,记得更换对应的ip
  • 这里的–token 来自前面kubeadm init输出提示,如果当时没有记录下来可以通过kubeadm token list 查看
kubeadm join 192.168.132.155:6443 --token l2og78.ut1s3rsawplgd3pp \
    --discovery-token-ca-cert-hash sha256:3df6de298e664ba155b0748f9901c3966a2dc29e4b4cc28c2fdded1d136a22c1

在这里插入图片描述

查看节点状态

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44839276/article/details/119543045

智能推荐

winform中picturebox自适应图片大小_winform picturebox自适应-程序员宅基地

文章浏览阅读5k次。https://blog.csdn.net/caesarx/article/details/7869771picturebox控件共有两种载入图片方式,分别为:pictureBox1.BackgroundImage = Image,pictureBox1.load(url)为使加载的图片自使用控件尺寸,可以分别对pictureBox控件设置BackGroundImageLayout=Stre..._winform picturebox自适应

5款免费国外域名邮箱Mail.ru,Yandex,Zoho ,25Mail.St ,Postale申请和使用教程_yandex入口-程序员宅基地

文章浏览阅读9.1w次,点赞4次,收藏16次。目前还免费的国外稳定可靠的域名邮箱主要有俄罗斯的Mail.ru,Yandex和美国的Zoho,以及25Mail.St ,Postale。它们都是很好的免费架设域名、企业邮局的第三方平台,可架设内置的邮件订阅网站RSS更新和用户订阅管理功能。目前Zoho免费用户不支持POP和SMTP,无法自建域名邮局设置订阅无法使用,不过Postale,mail.ru 和Yandex邮局都支持POP3和STMP。如果是个人简单的域名邮箱日常使用,直接使用Postale或腾讯域名邮箱或163域名邮箱就可以。一、Ya_yandex入口

altium designer PCB 导入ADS EM仿真_altium designer能和ads结合使用吗-程序员宅基地

文章浏览阅读2w次,点赞40次,收藏170次。AD PCB 导入ADS仿真欢迎交流学习——[email protected]相信很多同学都和我一样,看了网上各种PCB板导入ADS教程后,觉得很繁琐,还需要借助autoCAD进行中间操作,废话不多说,这里分享以下我的仿真过程,希望对大家有帮助。1、PCB生成ODB++文件这里我们并不生成geber 文件,或者其他DXF DWG文件,而是选择ODB++,ODB++不仅含有元器件参数,还含有网络参数。① 打开AD17 → file → fabrication output → ODB+_altium designer能和ads结合使用吗

zju网页的自动登录和认证_浙大网上登录认证-程序员宅基地

文章浏览阅读1.7k次。无线认证登录学校无线采用的是认证登陆的方式,但是登录无线认证需要打开浏览器,有时候网页很难跳转,所以希望找到一种能够快速的登录的方式。最近自学python,发现requests模块可以达到这个目的,就写了一个简单的脚本,因为是初学必然存在很多不足,也希望大家能帮我指出。假定: username:“username” password:“password” 操作系统:deepin 15..._浙大网上登录认证

LogHub 智能日志分析通用公开数据集-程序员宅基地

文章浏览阅读8.8k次,点赞7次,收藏56次。01 数据驱动的智能运维​ 随着人工智能(artificial intelligence,简称 AI)的发展,智能运维(artificial intelligence for IT operations,简称AIOps)的概念 [5] 于 2016 年被 Gartner 首次提出,即通过机器学习(machine learning)等算法分析来自于多种运维工具和设备的大规模数据,自动发现并实时响应系统出现的问题,进而提升信息技术(information technology,简称 IT)运维能力和自动化程度_loghub

Oracle 11gR2 RAC 单网卡 转 双网卡绑定 配置步骤_oracle rac更换网卡-程序员宅基地

文章浏览阅读1.2w次。之前写过一篇双网卡绑定的文章,如下:Oracle RAC 与 网卡绑定http://blog.csdn.net/tianlesoftware/article/details/6189639 Oracle RAC 修改 IP 地址http://blog.csdn.net/tianlesoftware/article/details/5362925 这篇看一个完整的RAC修改网卡绑定的例子。 一.原R_oracle rac更换网卡

随便推点

JWT之token机制与双token详解-程序员宅基地

文章浏览阅读1.3w次,点赞25次,收藏133次。token机制何为token​ token即为令牌,是服务器生成的一串字符串,作为客户端向服务器进行请求的“通行证”。在客户端进行初次登陆后由服务器返回,之后的每次请求只需要携带token进行请求即可,而无需携带密码等敏感信息为何tokentoken可以减少敏感信息在网络间的传递因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息便于传输,jwt的构成非常简单_双token

Word2vec And Doc2vec - 文本向量化_doc2vec和word2vec区别-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏11次。word2vec 与 doc2vec的区别:两者从字面意思上就可以大致判断出区别来,word2vec主要针对与单词,而doc2vec主要针对于文本:顾名思义,Word2Vec是在单个单词上训练的,而Doc2vec是在可变长度的文本上训练的,因此,每个模型可以完成的任务是不同的。使用Word2Vec,您可以根据上下文预测单词,反之则可使用Vera,而使用Doc2vec则可以测量完整文档之间的关系。概述:文本向量化是自然语言处理中的基础工作,文本的表示直接影响到了整个自然语言处理._doc2vec和word2vec区别

个人收藏的免费计数器-程序员宅基地

文章浏览阅读1.1k次。51yes.com2005/11/05 为您的网站提供免费计数统计服务,可统计项目多,且功能强大、设置方便,不弹插件及窗口。 yes52005/_免费计数器

LABVIEW2020 如何实现自加1_labview变量自加怎么处理-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏13次。可以配合局部变量实现LABVIEW自加1。1、设计前面板 前面板添加1个数值输入控件(数值)和一个数值显示控件(数值2),参见下图。2、程序框图(1)、程序框图添加1个事件结构(2)、事件结构的超时端设置为1000毫秒并连线(3)、事件结构中添加1个局部变量(4)、局部变量的选择项为“数值” 即:局部指向数值输入控件(数值)。(5)、数值+1送到局部变量(6)、再建立1..._labview变量自加怎么处理

Apache Thrift系列详解(二) - 网络服务模型_tserver apache-程序员宅基地

文章浏览阅读988次。前言Thrift提供的网络服务模型:单线程、多线程、事件驱动,从另一个角度划分为:阻塞服务模型、非阻塞服务模型。阻塞服务模型:TSimpleServer、TThreadPoolServer。非阻塞服务模型:TNonblockingServer、THsHaServer和TThreadedSelectorServer。TServer类的层次关系:正文TServerTSe..._tserver apache

Halcon教程九:把Halcon程序放到C#程序里_hoperatorset.getregioncenter-程序员宅基地

文章浏览阅读6.9k次,点赞12次,收藏69次。我们用Halcon的目的是什么?这个问题值得思考最终不是为了在Halcon软件上去做识别操作而是根据需求把这些Halcon功能移植到我们的程序里面halcon目前支持C,C++,C#这个可以从帮助文档里面看到在上一篇教程 我做了一个回形针的识别案例现在我们要将识别回形针的这段程序集成到我们的C#程序里面那么这个时候就要去掉不需要的函数原先用到的很多算子啥的都是为了在halcon的窗口显示而现在我们需要去我们自己的程序显示也就是上面的这些数据我们需要做到一个什么事情在我的C# 程_hoperatorset.getregioncenter

推荐文章

热门文章

相关标签