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

智能推荐

weka 决策树_weka决策树-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏30次。J48基于从上到下的策略,递归的分治策略,基于信息论决策树只出现了三个属性,只要最后能够完全分,也就是每个节点只有一个分类。修建决策树,简单方法,如果节点包含的实例非常少,就停止分裂在KEKA中修改参数minNumObj:每个叶节点最少包含多少实例可以先创建一个详尽的树反向修剪比正向修剪效果好。confidenceFactor:用于修剪的信心因数(较小的值导致更多的修改)subtreeRaising:修建一个内部节点并将它的子树提升一个层次,叫做子_weka决策树

python中__str__和__repr__的区别_stack的__str__和__repr__-程序员宅基地

文章浏览阅读251次。关于这个问题,Stackoverflow已经有了非常好的回答,我认为解释的非常清楚,链接如下:https://stackoverflow.com/questions/1436703/difference-between-str-and-repr 回答摘要The default implementation is useless (it’s hard to think of one..._stack的__str__和__repr__

Web网站压力及性能测试工具WebBench使用指南-程序员宅基地

文章浏览阅读66次。Webbench是知名的网站压力方面的测试工具,它是由Lionbridge公司开发。官方主页:http://home.tiscali.cz/~cz210552/webbench.html在运维工作中,网站压力及性能测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接 影响用户体验。但是,..._web网站压力及性能测试工具

Verilog语法(不可综合)_不可综合的verilog语句-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏5次。1.只有寄存器类型变量才能在initial内部被赋值。 2.verilog系统任务 (1):finish/finish/finish/stop finish:如果遇到finish:如果遇到finish:如果遇到finish,仿真器完成仿真并退出。 stop:当遇到stop:当遇到stop:当遇到stop,仿真器停止仿真,但不退出,同时提供一个命令提示符,在命令提..._不可综合的verilog语句

SIM7600X PPP 拨号并开机自启动_7600 拨号设置-程序员宅基地

文章浏览阅读903次,点赞2次,收藏2次。一.准备硬件准备树莓派 一套SIM7600CE 4G HAT 一套 (摆脱网线束缚)按照下图连接:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wq01f097-1609922520384)(https://www.waveshare.net/photo/accBoard/SIM7600CE-4G-HAT/SIM7600CE-4G-HAT-2_960.jpg)]软件准备安装minicomapt-get install minicom查看dev下面_7600 拨号设置

不用storyboard创建新项目之SceneDelegate.swift (Xcode 11 & IOS 13)_xcode 创建ios项目没有appdelegate.swift,scenedelegate.swi-程序员宅基地

文章浏览阅读1.9k次。如果是在Xcode11 & IOS 13之前,如果不用storyboard创建新项目,一般是在appDelegate.swift中,例子如下,我们简单的创建一个SearchBar用UINavigationController。现在,有一些小改变,sceneDelegate.swift相比于appDelegate.swift,更像是一个top-level UI object,所..._xcode 创建ios项目没有appdelegate.swift,scenedelegate.swift

随便推点

hadoop大数据环境部署--linux centos虚拟机_linux虚拟机部署大数据hadoop-程序员宅基地

文章浏览阅读403次。需要版本:jdk:jdk-7u79-linux-x64.tar.gzhadoop:hadoop-2.5.0-cdh5.3.6.tar.gz1.创建hadoop用户useradd -m hadoop -G root -s /bin/bash2.赋予hadoop用户最高权限chmod 777 hadoop--记得给hadoop设置密码passwd hadoophadoop3.切换..._linux虚拟机部署大数据hadoop

基于Springboot的大学生招聘网站系统_校园人才招聘系统开发背景-程序员宅基地

文章浏览阅读3.7k次,点赞6次,收藏40次。1.项目简介1.1 系统研究背景伴随着中国经济的飞速发展,城市化进程的加快,求职者队伍的不断壮大,传统人才招聘的弊端初露端倪。首先,传统人才应聘的形式是求职者和企业的负责人面对面地交流。这就需要企业和求职者提前规划自己的时间,准备大量的纸质材料,并选好举办招聘会的地点,这一系列流程都需要双方把大量的精力投入到准备活动中去,使得应聘还未开始,成本就已大幅增加。其次,企业在筛选数以百计,甚至数以万计简历的时候,往往会由于阅读疲劳,漏掉一些真正有价值的简历,使得企业丧失掉一批有用的人才。对于求职者而言,也_校园人才招聘系统开发背景

linux php添加redis,linux下的redis安装以及php添加redis扩展-程序员宅基地

文章浏览阅读327次。一、redis的安装win版本详见:下面是linux版本的安装步骤:step1、下载http://redis.io/download下载完后直接make然后make install,注意sudostep2、启动服务>cd redis安装目录/src>./redis-server  //注意,这种是带默认配置启动,如果要带配置使用:>./redis-server redis-co..._linux php 添加redis

关于我封装了BeanCopier这件事_java beancopier 封装-程序员宅基地

文章浏览阅读1.1k次。Bean的拷贝我们不陌生,经常与之打交道,看了很多评测,抛开功能不说,性能上前三大致就是原生的get/set、MapStruct、cglib bean copy。之所以需要是用beanCopy,就是因为大量的get/set不雅观(绝对不是我们懒)。MapStruct是在编译时期生成的代码,但是其使用让我觉得繁琐。cglib使用动态字节码技术生成class文件,在全局缓存的copier之后速度也是非常的快。但是也有很多不方便的地方,我结合实际需求,对它动了心。..._java beancopier 封装

数据库连接池的使用--DBCP_数据库连接池管理员工信息-程序员宅基地

文章浏览阅读76次。先导入jar包(commons-dbcp.jar,commons-pool.jar)方法一: 不使用配置文件BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(..._数据库连接池管理员工信息

关于hough变换边界连接的matlab实现_hough变换有断点-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏11次。关于图像分割和hough变换(19_02_12学习进度)关于hough变换边界连接的matlab实现matlab提供了三个函数用于Hough变换连接边界,使用Hough函数可以对图像进行Hough变换,将直角坐标系变为极坐标,然后对极坐标尽心修正之后使用houghpeak函数对图像进行峰值检测,检测出密集的交点最后使用houghline函数对图像进行直线的连接Hough变换的函数为Hou..._hough变换有断点