Kubernetes集群安装步骤

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、安装要求

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

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

二、软件环境

  • CentOS 7
  • Docker:20+
  • k8s:1.23.6

三、安装步骤

1、准备环境

角色IP地址组件
k8s-master192.168.1.10docker、kubectl、kubeadm、kubelet
k8s-node1192.168.1.11docker、kubectl、kubeadm、kubelet
k8s-node2192.168.1.12docker、kubectl、kubeadm、kubelet

2、初始操作

  • 检查操作环境的版本

 [root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
  • 主机名解析

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

 # 根据规划在三台主机分别设置好主机名# hostnamectl set-hostname <hostname>​[root@k8s-master ~]# vim /etc/hosts192.168.1.10 k8s-master192.168.1.11 k8s-node1192.168.1.12 k8s-node2
  • 时间同步

Kubernetes要求集群中的节点时间必须精确一致,这里使用chronyd服务从网络同步时间;企业中建议配置内部的会见同步服务器

 [root@master ~]# systemctl start chronyd[root@master ~]# systemctl enable chronyd[root@master ~]# date
  • 禁用iptables和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
  • 禁用selinux

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

 # 修改SELINUX的值为disable[root@master ~]# vim /etc/selinux/config...SELINUX=disabled...# 注意:修改完后需要重启,重启完后,可使用getenforce查看[root@k8s-master ~]# getenforceDisabled---------------------------------------------------# 另一种方法:下面两条命令分别设置永久与临时关闭SELinux:[root@master ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久[root@master ~]# setenforce 0  # 临时
  • 关闭swap分区

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

 # 注释掉swap分区一行[root@master ~]# vim /etc/fstab# /dev/mapper/centos-swap   swap    defaults     0  0​-----------------------------------------------------# swapoff -a  # 临时# sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
  • 修改Linux的内核参数

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

在Kubernetes中Service有几种工作模型:一种是基于Iptables的,一种是基于ipvs的;ipvs的性能明显要高一些,但如果需要使用它,需要手动载入ipvs模块:

 # 1、安装ipset和ipvsdm[root@master ~]# yum install ipset ipvsadm -y# 2、添加需要加载的模块写入脚本文件[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF# 2、为脚本添加执行权限[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

3、安装基础软件(所有节点)

  • 安装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 ~]# vim /etc/docker/daemon.json{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]}​# 5、启动dokcer并加入开机自启项中[root@master ~]# systemctl restart docker[root@master ~]# systemctl enable docker
  • 添加阿里云yum源

由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源

 # 1、添加k8syum配置[root@master ~]# vim /etc/yum.repod.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgchech=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  • 安装Kubeadm、kubelet、kubectl

 [root@master ~]# yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6​# 配置kubelet的cgroup[root@master ~]# vim /etc/sysconfig/kubeletKUBELET_CGROUP_ARGS="--cgroup-driver=systemd"KUBE_PROXY_MODE="ipvs"​# 设置kubelet开机自启[root@master ~]# systemctl enable kubelet

4、部署Kubernetes Master

以下操作在master节点上进行:

  • 准备集群镜像

在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看:

 [root@master ~]# kubeadm config images list# 下载镜像# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案[root@master ~]# vim /prepare-k8s.shimages=(kube-apiserver:v1.23.6kube-controller-manager:v1.23.6kube-scheduler:v1.23.6kube-proxy:v1.23.6pause:3.2etcd:3.5.0coredns:1.8.0)​for imageName in ${images[@]};dodocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageNamedocker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done
  • 集群初始化

 # 创建集群[root@master ~]# kubeadm init \--apiserver-advertise-address=192.168.1.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.23.6 \--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# 出现master节点则成功[root@master ~]# kubectl get nodes

5、加入Kubernetes Node

以下操作在node节点上操作:

  • 在k8s-master控制台初始化成功后复制join命令

 [root@k8s-node1 ~]# kubeadm join 192.168.113.120:6443 --token w34ha2.66if2c8nwmeat9o7 --discovery-token-ca-cert-hash sha256:20e2227554f8883811c01edd850f0cf2f396589d32b57b9984de3353a7389477
  • 如果初始的token不小心清空,可通过以下命令获取或重新申请:

 # token过期则重新申请[root@master ~]# kubeadm token create​# token没有过期则通过如下命令获取:[root@master ~]# kubeadm token list
  • 获取 --discovery-token-ca-cert-hash值:

 [root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \openssl dgst -sha256 -hex | sed 's/^.* //'

获取到值后需要在前面拼接上 sha256 使用

6、部署CNI网络插件

下载 calico 配置文件,可能会网络超时:

 [root@k8s-master ~]# cd ./opt[root@k8s-master opt]# mkdir k8s[root@k8s-master opt]# cd k8s/[root@k8s-master k8s]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed100    83  100    83    0     0    136      0 --:--:-- --:--:-- --:--:--   136[root@k8s-master k8s]# lscalico.yaml

修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同:

删除镜像 docker.io/ 前缀,避免下载过慢导致失败

 [root@k8s-master k8s]# grep imgae calico.yaml[root@k8s-master k8s]# sed -i 's#docker.io/##g' calico.yaml# 建议分别在三个节点中pull下所需镜像​[root@k8s-master k8s]# kubectl apply -f calico.yml​-----------------检查排错---------------------------# 查看节点情况[root@k8s-master k8s]# kubectl get pods -n kube-system# 查看详细信息[root@k8s-master k8s]# kubectl describe po <xxx> -n kube-system

7、测试Kubernetes集群

 # 创建部署[root@k8s-master ~]# kubectl create deployment nginx --image=nginx​# 暴露端口[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort​# 查看 pod 以及服务信息[root@k8s-master ~]# kubectl get pod,svcNAME                         READY   STATUS              RESTARTS   AGEpod/nginx-85b98978db-4gclp   0/1     ContainerCreating   0          24s​NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGEservice/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        5h15mservice/nginx        NodePort    10.101.177.187   <none>        80:32754/TCP   12s​# 访问[root@k8s-master ~]# curl 192.168.1.10:32754<!DOCTYPE html><html><head><title>Welcome to nginx!</title>...

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

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

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

相关文章

数据结构——栈(顺序结构)

一、栈的定义 栈是一种数据结构&#xff0c;它是一种只能在一端进行插入和删除操作的特殊线性表。这一端被称为栈顶&#xff0c;另一端被称为栈底。栈按照后进先出&#xff08;LIFO&#xff09;的原则进行操作&#xff08;类似与手枪装弹后射出子弹的顺序&#xff09;。在计算…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

配置web服务器

当访问网站www.haha.com时显示&#xff1a;haha&#xff1b;当访问网站www.xixi.com/secret/显示&#xff1a;this is secret 第一步&#xff0c;配置一个新的IP 确认后 esc返回 第二步&#xff1a;重启ens160 第三步&#xff1a;创建目录&#xff0c;并且在文件内写入内容 第…

【b站/哔哩哔哩/bilibili】视频缓冲慢的解决方法

最近我的b站视频缓冲很慢&#xff0c;加载速度只有100多kb/s。这导致视频加载非常慢&#xff0c;看几秒就卡很久&#xff0c;有时候甚至黑屏。 据某些b站网友研究&#xff0c;b站存在如下问题&#xff1a;相关动态 “2.更改网络协议。是的&#xff0c;你没看错&#xff0c;转了…

Unity UGUI 之 Toggle

​本文仅作学习笔记与交流&#xff0c;不作任何商业用途本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正​ 1.什么是Toggle&#xff1f; Unity - Manual: Toggle 带复选框的开关&#xff0c;可…

【Unity】Android Failed to transform Error while dexing.

文章目录 一、背景二、问题描述三、原因和解决方法 一、背景 1、Unity 2021.3.33f1 2、Firebase 11.7.0 3、升级至API-34 二、问题描述 错误信息 Failed to transform play-services-measurement-api-21.5.0.aar (com.google.android.gms:play-services-measurement-api:21.5.…

算法力扣刷题记录 五十六【501.二叉搜索树中的众数】

前言 二叉搜索树操作&#xff0c;继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;…

【Socket编程】基于TCP协议实现客户端与服务端的通信

前言 由于TCP是面向连接的&#xff0c;所以在创建套接字之后还需要进入监听状态&#xff0c;监听状态下可以获取客户端的请求。获得请求之后&#xff0c;服务器需要接受连接&#xff0c;之后再处理事务。 实现服务端具体步骤 总的来说&#xff0c;TCP服务端主要实现以下步骤…

达梦数据库的系统视图v$dmwatcher

达梦数据库的系统视图v$dmwatcher 查询当前登录实例所对应的守护进程信息&#xff0c;注意一个守护进程可以同时守护多个组的实例&#xff0c;因此查询结果中部分字段&#xff08;N_GROUP、SWITCH_COUNT&#xff09;为守护进程的全局信息&#xff0c;并不是当前登录实例自身的…

0401-403组合逻辑电路的分析设计竞争冒险

组合逻辑电路的分析设计&竞争冒险 4.组合逻辑电路1.目录2.教学基本要求3.序 关于组合逻辑电路 4.1组合逻辑电路分析与设计一、组合逻辑电路分析二、组合逻辑电路的分析步骤&#xff1a;三、组合逻辑电路的分析举例例1 奇校验电路例2.对输入的二进制求反码例3.一个工厂发电的…

使用 PVE 自签 CA 证书签发新证书

前言 PVE 安装时会自动创建一个有效期 10 年的 CA 证书, 我们可以利用这个 CA 证书给虚拟机中的 Web 应用签发新的 TLS 证书用于提供 HTTPS 服务. 下面以 PVE 虚拟机中通过 Docker 跑的一个 雷池 应用为例进行演示. PVE 证书位置 官方文档: https://pve.proxmox.com/wiki/Pr…

服务攻防-框架安全(漏洞复现)

关闭靶场 sudo docker-compose down 运行此靶场 sudo docker-compose up -d 查看启动环境 sudo docker ps 运行dockers容器 docker exec -it 64052abd288b /bin/bash thinkphp框架 thinkphp 2 - rce漏洞复现 docker exec -it 731dbae0e0b5 /bin/bash 集成化工具扫描 可以命令…

十五届蓝桥杯JAVA B组题目详解(持续更新中)

试题 B: 类斐波那契循环数 我发现蓝桥杯的题目现在就是要费时间去理解&#xff0c;所以还是审题很重要&#xff0c;这道题的思路就是&#xff0c;一个n位数的前n个数&#xff0c;都是对应的位数上的值&#xff0c;比如说12345&#xff0c;五位数是吧&#xff0c;那数列S的前五位…

phpstudy下载使用以及搭建本地SQL labs靶场

一&#xff0c;PHP study 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; (xp.cn) 1&#xff0c;下载。 根据自己电脑系统下载对应的版本。 双击exe文件运行 选择下载目录&#xff08;路径不能有中文名&#xff09;。 2&#xff0c;使用。 启动阿帕奇和MySQ…

数据库第二次作业

1.建立数据库 2.插入数据 3.完成查询 &#xff08;1&#xff09;、显示所有职工的基本信息。 &#xff08;2&#xff09;、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 &#xff08;3&#xff09;、求出所有职工的人数。 &#xff08;4&#xff09;、列…

组队学习——贝叶斯分类器

前言 本次数据继续沿用上一次主题的【组队学习——支持向量机-CSDN博客】 数据处理部分延续【组队学习——支持向量机】主题的处理办法对应划分训练集和验证集 模型选择 本次贝叶斯分类器模型的较多&#xff0c;常用的为高斯朴素贝叶斯分类器、多项式朴素贝叶斯分类器、伯努…

JavaWeb总结

终于结束了JavaWeb的学习&#xff0c;个人感觉其实就是学习客户端与服务端交互的中间件&#xff0c;以及服务端处理的逻辑&#xff0c;来帮助我们构建整个项目的运转逻辑&#xff0c;从客户端到服务器再到客户端&#xff0c;核心是围绕着一系列的请求和响应如何处理&#xff0c…

嵌入式Linux学习: platform 设备驱动实验

在Linux中&#xff0c;Platform&#xff08;平台&#xff09;机制是一个重要的设备驱动管理框架&#xff0c;它主要在Linux 2.6内核及以后的版本中引入。Platform机制的主要目的是提供一种统一的方式来管理那些不直接挂靠在传统物理总线&#xff08;如USB、PCI、I2C、SPI等&…

论文阅读:Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting

论文地址&#xff1a;https://arxiv.org/abs/2407.08223 RAG 将 LLM 的生成能力与外部知识源相结合&#xff0c;以提供更准确和最新的响应。最近的 RAG 进展侧重于通过迭代 LLM 完善或通过 LLM 的额外指令调整获得自我批判能力来改进检索结果。在这项工作中&#xff0c;作者介…

编程中的智慧六:单例、原型、建造者

上一篇咱们结合Spring介绍了设计模式中的工厂模式相关方法&#xff0c;其实现在Java开发基本上都是基于Spring框架开发&#xff0c;所以后续我们在开发过程中基本上很少自己重写一个工厂模式&#xff0c;都是直接使用Spring来完成。今天咱们接着看剩下的创建型设计模式&#xf…