菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

kubernetes集群环境搭建

5107人阅读 2022/4/1 18:07 总访问:960158 评论:0 收藏:0 手机
分类: k8s

2.1 前置知识点

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

kubeadm

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

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

二进制包

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

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

image-20200404094800622

2.2 kubeadm 部署方式介绍

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

  • 创建一个Master 节点kubeadm init

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

2.3 安装要求

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

  • 一台或多台机器,操作系统CentOS7.x-86_x64

  • 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多

  • 集群中所有机器之间网络互通

  • 可以访问外网,需要拉取镜像

  • 禁止swap 分区

2.4 最终目标

  • 在所有节点上安装Docker 和kubeadm

  • 部署Kubernetes Master

  • 部署容器网络插件

  • 部署Kubernetes Node,将节点加入Kubernetes 集群中

  • 部署Dashboard Web 页面,可视化查看Kubernetes 资源

2.5 准备环境


image-20210609000002940

角色IP地址组件
master192.168.181.100docker,kubectl,kubeadm,kubelet
node1192.168.181.101docker,kubectl,kubeadm,kubelet
node2192.168.181.102docker,kubectl,kubeadm,kubelet

2.6 环境初始化

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

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

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

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

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

# 启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date
2.6.4  禁用iptable和firewalld服务

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

# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables
2.6.5 禁用selinux

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

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

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

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap
2.6.7 修改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
2.6.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

2.6.9重启服务器
[root@master ~]# reboot

重启服务器后查看到修改已经生效就完成了


评价

阿里云 kubernetes

https://help.aliyun.com/document_detail/86759.html 可以有三种计费方式https://ecs-buy.aliyun.com/wizard?spm=5176.13...

kubernetes Job讲解

kubernetes Job讲解[TOC] 需求来源Job 背景问题我们可以通过Pod来直接运行任务进程吗?这样做将会产生以下几种问题:1. 我...

kubernetes DaemonSet讲解

Kubernetes DaemonSet讲解[TOC] 需求来源背景问题我们可以让每个集群内的节点都运行一个相同的Pod吗?如果这样做,以下的...

kubernetes Pod中断预算【PDB】

Kubernetes Pod中断预算【PDB】[TOC] 尽管Deployment或ReplicaSet一类的控制器能够确保相应Pod对象的副本数量不断逼近期...

kubernetes Velero 备份的运用

Velero 的运用[TOC] Velero简介Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本...

kubernetes 应用配置管理

Kubernetes 应用配置管理[TOC] 需求来源背景问题除了依托容器镜像来定义运行的Container,Pod还需要解决如下问题:1. 不可...

kubernetes 应用存储和持久化数据卷

Kubernetes 应用配置管理[TOC] Volumes介绍Pod Volumes1. 如果一个Pod中某一个容器异常退出,被kubelet拉起如何保证之前的...

kubernetes 应用存储和持久化数据卷:存储快照与拓扑调度

Kubernetes 应用存储和持久化数据卷:存储快照与拓扑调度[TOC] 基本知识存储快照产生背景1. 如何保证重要数据在误操作之后...

kubernetes网络(IPVLAN与MACVLAN)

Kubernetes网络模型[TOC] 三种网络模型 在k8s中一般常见的网络模型支持三种,虚拟网桥、多路复用和硬件交换。 虚拟网...

kubernetes IP Address

Kubernetes IP Address[TOC] IP AddressIP地址是在计算机网络中被用来唯一标识设备的一组数字。IPv4地址由32位二进制数值...

Dapr 官方教程第二章(Hello World kubernetes)

Dapr 官方教程第二章(Hello World Kubernetes)[TOC] 本教程将帮助您在 Kubernetes 集群中使用 Dapr。您将从Hello World部...

kubernetes 搭建RabbitMq集群环境

Kubernetes 搭建RabbitMq集群环境[TOC] 由于Kubectl RabbitMQ 插件在官方是基于krew进行安装的所以我们首先需要安装krew插...

kubernetes 删除命名空间

Kubernetes 删除命名空间[TOC] 可以直接通过如下命令删除k8s中命名空间下的所有资源。kubectl delete ns [namespace] ...

kubernetes top之安装metrics-server

Kubernetes top之安装metrics-server[TOC] 一般我们需要知道kubernetes的pod与node的cpu与内存使用情况时,我们可以通过ku...

kubernetes ExternalName Service

Kubernetes ExternalName Service[TOC] ExternalName 的服务与普通服务的区别在于:将服务映射到 DNS 名称。如下图所示: ...

kubernetes 自定义Endpoint资源

Kubernetes 自定义Endpoint资源[TOC] 当pod需要服务发布出去的时候中间所关联的还有一个Endpoint这个资源,它能确定服务关...