二、kubernetes集群环境搭建

news2025/1/15 12:53:48

文章目录

        • 1.前置知识点
        • 2.kubeadm 部署方式介绍
        • 3.安装要求
        • 4.最终目标
        • 5.集群环境
        • 6 初始化环境
          • 6.1 检查操作系统版本
          • 6.2 主机名解析
          • 6.3 时间同步
          • 6.4 禁用selinux
          • 6.5 禁用swap分区
          • 6.6 修改linux的内核参数
          • 6.7 配置ipvs功能
          • 6.8 安装docker
          • 6.9 安装Kubernetes组件
          • 6.10 准备集群镜像
          • 6.11 集群初始化
          • 6.12 安装网络插件,只在master节点操作即可
        • 7 集群测试
          • 7.1 创建一个nginx服务
          • 7.2 暴露端口
          • 7.3 查看服务

1.前置知识点

目前生产部署Kubernetes 集群主要有两种方式:

kubeadm

Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制包

从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。

Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

在这里插入图片描述

2.kubeadm 部署方式介绍

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

  • 创建一个Master节点kubeadm init
  • 将Node节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>

3.安装要求

在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统CentOS7.x-86_x64
  • 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap 分区

4.最终目标

在所有节点上安装Docker和kubeadm

  • 部署Kubernetes Master
  • 部署容器网络插件
  • 部署Kubernetes Node,将节点加入Kubernetes 集群中
  • 部署Dashboard Web 页面,可视化查看Kubernetes 资源

5.集群环境

在这里插入图片描述

角色IP安装组件
master192.168.75.140docker,kubectl,kubeadm,kubelet
node1192.168.75.141docker,kubectl,kubeadm,kubelet
node2192.168.75.142docker,kubectl,kubeadm,kubelet

6 初始化环境

6.1 检查操作系统版本
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
6.2 主机名解析

为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器

# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.75.140 master
192.168.75.141 node1
192.168.75.142 node2
6.3 时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会见同步服务器

# 启动chronyd服务
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd

6.4 禁用iptables和firewalld

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
# 2 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
6.4 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启机器
SELINUX=disabled
6.5 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启机器
vim /etc/fstab
注释掉 #/dev/mapper/cl-swap     swap
# /dev/mapper/centos-swap swap
6.6 修改linux的内核参数
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
6.7 配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的,两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -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
6.8 安装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-18.06.3.ce-3.el7 -y

# 4、添加一个配置文件
#Docker 在默认情况下使用Vgroup 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://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

顺便可以将docker的镜像存储位置更改一下,避免后面因空间不足导致其他问题,添加data-root后重启docker

{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"],
"data-root": "/data/docker"
}
6.9 安装Kubernetes组件
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
# 2、编辑/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

# 3、安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 4、配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 5、设置kubelet开机自启
[root@master ~]# systemctl enable kubelet
6.10 准备集群镜像
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list

# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案

#!/bin/bash
images=(
        kube-apiserver:v1.17.4
        kube-controller-manager:v1.17.4
        kube-scheduler:v1.17.4
        kube-proxy:v1.17.4
        pause:3.1
        etcd:3.4.3-0
        coredns:1.6.5
)

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
6.11 集群初始化

下面的操作只需要在master节点上执行即可

[root@master k8s]# kubeadm init \
	--apiserver-advertise-address=192.168.75.140 \
	--image-repository registry.aliyuncs.com/google_containers \
	--kubernetes-version=v1.17.4 \
	--service-cidr=10.96.0.0/12 \
	--pod-network-cidr=10.244.0.0/16

# 初始化成功后根据提示创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

下面的操作只需要在node节点上执行即可

kubeadm join 192.168.75.140:6443 --token awk15p.t6bamck54w69u4s8 \
    --discovery-token-ca-cert-hash sha256:a94fa09562466d32d29523ab6cff122186f1127599fa4dcd5fa0152694f17117 

在master上查看节点信息

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE   VERSION
master   Ready      master   25h   v1.17.4
node1    Ready      <none>   25h   v1.17.4
node2    NotReady   <none>   25h   v1.17.4
6.12 安装网络插件,只在master节点操作即可
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

由于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml,位置:/root/kube-flannel.yml内容:

https://github.com/flannel-io/flannel/tree/master/Documentation/kube-flannel.yml

使用配置文件启动fannel

kubectl apply -f kube-flannel.yml

6.14 生成新的token

# 生成新的token
[root@master ~]# kubeadm token create --print-join-command

7 集群测试

7.1 创建一个nginx服务
kubectl create deployment nginx  --image=nginx:1.14-alpine
7.2 暴露端口
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort
7.3 查看服务
kubectl get pod,svc

在这里插入图片描述
在外面使用node IP加端口进行访问测试

上一篇:一、Kubernetes介绍
下一篇:三、k8s资源管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程案例

日升时奋斗&#xff0c;日落时自省 目录 1、单例模式 1.1、饿汉模式 1.2、懒汉模式 1.3、饿汉和懒汉的线程安全 2、生产者消费者模型 2.1、理论解释 2.2、优势 2.3、阻塞队列代码解析 2.4、生产者消费者代码解析 2.5、简单实现阻塞队列代码解析 3、定时器 3.1、定时…

Java中String、StringBuffer 和 StringBuilder 的区别

1. String 字符串常量&#xff0c;字符串长度不可变。Java 中 String 是 immutable&#xff08;不可变&#xff09;的。 2. StringBuffer 1.如果要频繁对字符串内容进行修改&#xff0c;出于效率考虑最好使用 StringBuffer&#xff0c;如果想转成 String 类型&#xff0c;可以调…

论文笔记Neural Ordinary Differential Equations

论文笔记Neural Ordinary Differential Equations概述参数的优化连续标准化流&#xff08;Continuous Normalizing Flows&#xff09;生成式的隐轨迹时序模型&#xff08;A generative latent function time-series model&#xff09;这篇文章有多个版本&#xff0c;在最初的版…

嵌入式系统IO体系简述

前言&#xff1a; CPU的主要职责是负责运算&#xff0c;而计算机是需要各种外设的&#xff0c;否则无法和人进行交互。早期x86体系的CPU&#xff0c;需要使用前端总线&#xff08;fsb&#xff09;和北桥芯片相连&#xff0c;北桥再和南桥相连。南北桥是一种架构的划分&#xff…

数据结构与算法——算法分析(3)

算法的时间复杂度计算 算法基本操作执行的次数还会随着问题输入的数据集不同而不同 最坏时间复杂度&#xff1a;在最坏的情况下&#xff0c;算法的时间复杂度 平均时间复杂度&#xff1a;所有可能输入在等概率的情况下算法的期望运行时间 最好时间复杂度&#xff1a;在最好的…

企业内训方案|数据治理/项目管理/敏捷项目管理/产品管理

企业内训方案|数据治理/项目管理/敏捷项目管理/产品管理 》》数据治理 数据管理基础 数据处理伦理 数据治理 数据架构 数据建模和设计 数据安全 数据集成和互操作 文件和内容管理 参考数据和主数据 数据仓库和商务智能 元数据管理 数据质量 大数据和数据科学 数据管理成熟度评…

网络协议HTTP:了解Web及网络基础

文章整理自图书图解Http第一章&#xff1a;使用Http协议访问Web第二章&#xff1a;Http的诞生第三章&#xff1a;网络基础TCP/IP协议一&#xff1a;应用层二&#xff1a;传输层三&#xff1a;网络层四&#xff1a;链路层五&#xff1a;TCP/IP通信传输流第四章&#xff1a;IP、T…

http与https的区别我真的知道吗

之前每次看到类似“http与https的区别&#xff1f;”的问题时&#xff0c;都会自己思考一下答案&#xff0c;好像只是浅显地知道https比http安全&#xff0c;但究竟为什么更安全&#xff0c;却又似乎说不出个所以然&#xff0c;或者说很多细节地方自己都是不清楚的。为了搞清楚…

Linux权限shell命令以及运行原理

文章目录一、Linux权限的概念二、Linux权限管理2.1.文件访问者的分类&#xff08;角色&#xff09;2.2文件属性2.3文件访问权限的相关设置方法2.4访问者角色的修改2.5目录权限含义2.6默认权限三、粘滞位四、 shell命令以及运行原理一、Linux权限的概念 权限的概念通常是指行事…

ffmpeg录制H265格式的桌面视频

ffmpeg本身不支持H265&#xff0c;如果需要支持&#xff0c;需要事先编译出libx265&#xff0c;读者可以到libx265的官方网站https://www.videolan.org/developers/x265.html上找到下载地址&#xff0c;本人下载的是x265_3.5.tar.gz。 编译libx265时&#xff0c;定位到其目录下…

java基础 网络编程

网络编程概念&#xff1a; 让程序可以和网络上的其他设备中的程序进行数据交互。 网络通信基本模式&#xff1a; CS&#xff1a;Client-Server 自己写客户端和服务器交流 BS&#xff1a;Browser/Server 通过浏览器和服务器交流 实现网络编程关键的三要素…

python中的函数与变量

一、函数python中函数的基本格式则为:def函数名参数名函数体返回&#xff0c;python作为一门面向对象的语言&#xff0c;同样可分为类函数、实例函数。 # 定义一个函数 def add(x, y):"""函数的说明:param x: 参数x的作用:param y: 参数y的作用:return: 函数返…

碱性环境吸钯树脂技术

汞和贵金属的选择性去除回收离子交换树脂 Tulsimer CH-95S 是一款为了从工业废水中去除回收汞和贵金属而开发的螯合树脂。 Tulsimer CH-95S是一款拥有聚乙烯异硫脲官能基的大孔树脂&#xff0c;这种树脂对汞有的选择性。它也选择其他的贵金属&#xff0c;如黄金&#xff0c;铂…

消息收发弹性——生产集群如何解决大促场景消息收发的弹性降本诉求

作者&#xff1a;宸罡 产品介绍—什么是消息收发弹性 大家好&#xff0c;我是来自阿里云云原生消息团队的赖福智&#xff0c;花名宸罡&#xff0c;今天来给大家分享下阿里云 RocketMQ5.0 实例的消息弹性收发功能&#xff0c;并且通过该功能生产集群是如果解决大促场景消息收发…

JS in CSS:一键支持响应式布局

前言 如今网速不再成为适配移动端时选择响应式设计的限制因素&#xff0c;在资源充足的条件下&#xff0c;针对各端各自设计应用界面能达到应用最佳用户体验&#xff0c;毕竟不同类型的设备交互体验是不同的&#xff0c;但在团队前端资源拮据时&#xff0c;相比无脑自适应&…

基于Java+jquery+SpringMVC校园网站平台设计和实现

基于JavajquerySpringMVC校园网站平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

临时白名单

临时白名单介绍 相关常量 临时白名单列表介绍 前两个临时白名单可以豁免后台启动Service、豁免uid后台1min后进入idle状态等&#xff0c;最后一个临时白名单可以后台启动FGS。 // 由于高优先级消息而暂时允许逃避后台检查的一组应用程序 ID&#xff0c;短信/彩信 Composite…

【Vue路由】路由守卫、生命周期钩子、路由器工作模式

文章目录生命周期钩子案例实现总结路由守卫全局路由守卫独享守卫组件内守卫总结路由器的两种工作模式总结生命周期钩子 我们在News组件列表中的第一行加一个渐变文字。同时原来的路由缓存功能也要保存。 案例分析&#xff1a; 我们实现这个渐变的效果&#xff0c;是使用周期定…

Go select底层原理

在对Channel的读写方式上&#xff0c;除了我们通用的读 i <- ch, i, ok <- ch&#xff0c;写 ch <- 1 这种阻塞访问方式&#xff0c;还有select关键字提供的非阻塞访问方式。 在日常开发中&#xff0c;select语句还是会经常用到的。可能是channel普通读写的使用频率比…

基于Node.js和vue的博客系统的设计与实现

摘要随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以在线发布博客文章&#xff0c;简单、快捷的方便了人们的日常生活。同样的&#xff0c;在人们的工作生活中&#xff0c;也需要互联网技术来…