操作环境:Centos7.9.2009、CPU(2G)、内存(2G)、硬盘(30G)

一主两从:

master:192.168.159.140(Centos7.9.2009、CPU(2G)、内存(2G)、硬盘(30G))

node1:192.168.159.141(Centos7.9.2009、CPU(2G)、内存(2G)、硬盘(30G))

node2:192.168.159.142(Centos7.9.2009、CPU(2G)、内存(2G)、硬盘(30G))

环境初始化:

1)、设置主机名

[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2

2)、主机名解析

主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
[root@master ~]# vim + /etc/hosts192.168.159.140 master
192.168.159.141 node1
192.168.159.142 node2

3)、时间同步(三台均执行同样操作)

# 启动chronyd服务
[root@master ~]# systemctl start chronyd # 设置chronyd服务开机自启
[root@master ~]# systemctl enable chronyd # chronyd服务启动稍等几秒钟,就可以使用date命令验证时间了
[root@master ~]# date
Fri Feb 19 18:17:26 CST 2021

4)、禁用iptables和firewalld(三台均执行同样操作)

kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系 统的规则
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl stop iptables

5)、禁用selinux(三台均执行同样操作)

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的问题
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled
[root@master ~]# vim /etc/selinux/config # 注意修改完毕之后需要重启linux服务
SELINUX=disabled

6)、禁用swap分区(三台均执行同样操作)

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
# 编辑分区配置文件/etc/fstab,注释掉swap分区一行 # 注意修改完毕之后需要重启linux服务[root@master ~]# vim /etc/fstab /dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=23d312dc-c9e3-440e-b014-4e34807588c3 /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

7)、修改linux的内核参数(三台均执行同样操作)

# 修改linux的内核参数,添加网桥过滤和地址转发功能 # 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:[root@master ~]# vim /etc/sysctl.d/kubernetes.confnet.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1# 重新加载配置
[root@master ~]# systemctl -p /etc/sysctl.d/kubernetes.conf# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter # 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
br_netfilter           22256  0
bridge                151336  1 br_netfilter

8)配置ipvs功能(三台均执行同样操作)

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
# 1 安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y # 2 添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF # 3 为脚本文件添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules # 4 执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules # 5 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  0
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0
ip_vs_wrr              12697  0
ip_vs_rr               12600  0
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

9)、 重启服务器

[root@master ~]# reboot

安装docker(三台均安装)

# 1 切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # 2 查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates # 3 安装特定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-19.03.15-3.el7 -y # 4 添加一个配置文件
# Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替 cgroupfs [root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF > /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://1zipy8kx.mirror.aliyuncs.com"]
}
EOF # 5 启动docker
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker # 6 检查docker状态和版本
[root@master ~]# docker version
Version:          19.03.15

安装kubernetes组件(三台均安装)

# 由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg # 安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.22.0-0 kubelet-1.22.0-0 kubectl-1.22.0-0 -y # 配置kubelet的cgroup
# 编辑/etc/sysconfig/kubelet,添加下面的配置
[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs" # 4 设置kubelet开机自启
[root@master ~]# systemctl enable kubelet

准备集群镜像(三台均安装)

# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list k8s.gcr.io/kube-apiserver:v1.22.7
k8s.gcr.io/kube-controller-manager:v1.22.7
k8s.gcr.io/kube-scheduler:v1.22.7
k8s.gcr.io/kube-proxy:v1.22.7
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:1.8.4# 下载镜像
# 此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案
[root@master ~]# images=(
kube-apiserver:v1.22.7
kube-controller-manager:v1.22.7
kube-scheduler:v1.22.7
kube-proxy:v1.22.7
pause:3.5
etcd:3.5.5-0
coredns:v1.8.4
)[root@master ~]# for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

集群初始化

下面开始对集群进行初始化,并将node节点加入到集群中
下面的操作只需要在 master 节点上执行即可
下面的操作只需要在 node 节点上执行即可

# 将node节点加入集群
[root@node1 ~]# kubeadm join 192.168.159.140:6443 \
--token we4ayz.64m8jim2q6a6stqg \
--discovery-token-ca-cert-hash sha256:4d324134109b6abb0fe59c81af4ff9c8e45a56e460adeeba9d8f5551f37f7306[root@node2 ~]# kubeadm join 192.168.159.140:6443 \
--token we4ayz.64m8jim2q6a6stqg \
--discovery-token-ca-cert-hash sha256:4d324134109b6abb0fe59c81af4ff9c8e45a56e460adeeba9d8f5551f37f7306# 查看集群状态 此时的集群状态为NotReady,这是因为还没有配置网络插件
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   14m     v1.22.0
node1    NotReady   <none>                 2m59s   v1.22.0
node2    NotReady   <none>                 5s      v1.22.0

安装网络插件

kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择 flannel
下面操作依旧只在 master 节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点 上都运行
# 获取fannel的配置文件
[root@master~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml 由于网络原因,手动加载事先下载后的flannel镜像
# docker load -i flanneld-v0.12.0-amd64.docker # 使用配置文件启动fannel
[root@master ~]# kubectl apply -f kube-flannel.yml#查看节点状态
[root@master ~]# kubectl get nodesNAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   7h12m   v1.22.0
node1    Ready    <none>                 7h1m    v1.22.0
node2    Ready    <none>                 6h58m   v1.22.0

查看集群状态

此时scheduler Unhealthy

[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                STATUS     MESSAGE ERROR scheduler           Unhealthy    Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251:connect: connection refused
controller-manager  Healthy      ok
etcd-0              Healthy      {"health":"true","reason":""}

解决:

[root@master ~]# cd /etc/kubernetes/manifests/
修改:kube-scheduler.yaml 注释port=0 #- --port=0 #重启kubelet服务
[root@master ~]# systemctl restart kubelet[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME               STATUS       MESSAGE    ERROR
scheduler          Healthy       ok
controller-manager Healthy       ok
etcd-0             Healthy       {"health":"true","reason":""}

此环境搭建完成

Kubernetes之集群环境搭建相关推荐

  1. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  2. kubernetes集群环境搭建(kubeadm方式)

    1. kubernetes简介 kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2 ...

  3. Kubernetes集群环境搭建详细教程(一主两从)

    Kubernetes集群环境搭建详细教程(一主两从) 1.1 安装要求 在开始之前,部署Kubernetes 集群机器需要满足以下几个条件: 一台或多台机器,操作系统CentOS7.x-86_x64 ...

  4. Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建

    Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建 1. 前言 2. 安装三个Ubuntu 2.1 三个机器都关闭防火墙 2.2 三个机器都关闭swap 2.3 三个机器都 ...

  5. Kubernetes1.24版本高可用集群环境搭建(二进制方式)

    背景: 虽然kubeadm方式安装集群更加简单些,配置相对比较少,但是生产环境还是建议二进制的方式安装,因为二进制的方式kubernetes的kube-apiserver.kube-controlle ...

  6. 2W 字详解 Redis 6.0 集群环境搭建实践

    原文链接:https://www.cnblogs.com/hueyxu/p/13884800.html 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环 ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. hadoop集群环境搭建准备工作

    一定要注意hadoop和linux系统的位数一定要相同,就是说如果hadoop是32位的,linux系统也一定要安装32位的. 准备工作: 1 首先在VMware中建立6台虚拟机(配置默认即可).这是 ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装

    一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120master192.168.0.121slave1192.168.0.122 slave2 ...

  10. 『高级篇』docker之DockerSwarm的集群环境搭建(28)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之DockerSwarm的集群环境搭建(28) 上次了解了docker Swarm,这次一起动手操作,搭 ...

最新文章

  1. Android Broadcast Security
  2. Build: 0 succeeded or up-to-date, 0 failed, 1 skipped
  3. 光端机和收发器的区别有哪些?
  4. 助你解决新手开车四大问题 为您支招
  5. ApacheCN 未来发展方向(暂定)2019.8.2
  6. 记录——《C Primer Plus (第五版)》第九章编程练习第六题
  7. 2016年6月份那些最实用的 jQuery 插件专辑
  8. MySQL的InnoDB存储引擎
  9. 各历史版本NDK下载地址
  10. 桌面好看的linux系统,可以当桌面的LINUX漂亮壁纸
  11. 大数据分析项目生命周期
  12. 算法学习笔记——数据结构:树状数组BIT
  13. Nordic nRF52840实战学习--ble_app_blinky例程
  14. 经验分享 针式打印机经典案例分析
  15. ps钢笔路径打不出字怎么解决?
  16. 【日常】我的电影、小说、番剧、歌曲“观看记录清单”
  17. 多个excel工作簿、工作表合并
  18. UML建模基础知识点
  19. 【蓝桥杯省赛真题32】Scratch帆船运动 少儿编程scratch蓝桥杯省赛真题讲解
  20. Nginx基本使用方法

热门文章

  1. 李宏毅机器学习——逻辑回归
  2. 《流畅的Python》读书笔记——接口:从协议到抽象基类
  3. Netty in action—codec框架
  4. Go在容器运行时要注意的细节
  5. 产品管理工作的文档管理
  6. 电子工业出版社博文视点Open Party 新年聚会 圆满成功召开
  7. 何为启发式算法——退火算法,蚁群算法,遗传算法
  8. Android Tween动画之RotateAnimation实现图片不停旋转
  9. android handler的机制和原理_Android消息机制的原理及源码解析
  10. ug区域轮廓铣没有重叠距离_UG加工基本操作