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;。在计算…

【51项目】基于51单片机protues交通灯的设计(完整资料源码)

基于51单片机protues交通灯的设计 一、 项目背景 1.1背景 随着科技的不断发展,LED技术在交通领域的应用越来越广泛。LED模拟交通灯作为一种新型的交通信号控制设备,以其高效、节能、环保等优点,逐渐取代了传统的交通信号灯。近年来,我国城市化进程不断加快,城市人口和车辆…

iOS应用冷启动优化,可以做哪些事情

main()函数之后 首屏渲染不需要的&#xff0c;在首屏渲染完成后&#xff0c;异步执行&#xff1b;首屏渲染必要的&#xff0c;梳理依赖关系&#xff0c;生成启动树&#xff08;startTree&#xff09;&#xff0c;调用 root 节点的 start 方法&#xff0c;依次执行各个节点&…

服务攻防-应用协议cve

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

qt-C++笔记之json文件内容操作完整例程

qt-C笔记之json文件内容操作完整例程 code review! 文章目录 qt-C笔记之json文件内容操作完整例程1.运行输出2.运行后的test.json文件内容3.main.cpp 1.运行输出 读取到的 JSON 对象: {"Array": ["Item1","Item2"],"Name": "Ex…

掌握Xcode后台处理的艺术:iOS应用的隐形力量

掌握Xcode后台处理的艺术&#xff1a;iOS应用的隐形力量 在iOS应用开发中&#xff0c;后台处理能力是提升用户体验的关键因素之一。无论是在后台下载数据、播放音乐&#xff0c;还是在后台完成长时间运行的任务&#xff0c;Xcode都提供了强大的工具和API来支持这些操作。本文将…

jvm-证明cpu指令是乱序执行的案例

package jvm;/*** 证明cpu指令是乱序执行的** author 1* version 1.0* description: TODO* date 2024-07-19 9:31*/ public class T04_Disorder {private static int x 0, y 0;private static int a 0, b 0;public static void main(String[] args) throws InterruptedExcep…

B树:高效的数据存储结构

在计算机科学中&#xff0c;B树&#xff08;B-Tree&#xff09;是一种平衡多路查找树&#xff0c;它广泛应用于数据库和文件系统等需要高效数据存储和检索的场景。B树的设计旨在优化磁盘I/O操作&#xff0c;通过减少磁盘访问次数来提高数据检索的效率。本文将介绍B树的基本概念…

配置web服务器

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

Python中with 关键字、tell() 和 seek() 方法

在 Python 编程中&#xff0c;文件操作是常见的任务之一。无论是读取数据还是写入数据&#xff0c;都需要对文件进行适当的管理和操作。本文将介绍如何使用 with 关键字来简化文件操作&#xff0c;并结合 tell() 和 seek() 方法实现灵活的文件指针控制。 with 关键字&#xff…

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

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

RabbitMQ是什么?

RabbitMQ是一个开源的消息代理软件&#xff08;Message Broker&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff0c;Advanced Message Queuing Protocol&#xff09;&#xff0c;并支持多种消息传递协议。它最初由英国的Rabbit Technologies开发&…

力扣题解(盈利计划)

879. 盈利计划 集团里有 n 名员工&#xff0c;他们可以完成各种各样的工作创造利润。 第 i 种工作会产生 profit[i] 的利润&#xff0c;它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作&#xff0c;就不能参与另一项工作。 工作的任何至少产生 minProfit 利润的…

Unity UGUI 之 Toggle

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

等保测评的未来展望:智能化、自动化与合规性的深度融合

随着信息技术的飞速发展&#xff0c;网络安全威胁日益复杂多变&#xff0c;保障信息系统安全成为各行各业不可忽视的重要任务。等级保护&#xff08;简称“等保”&#xff09;作为国家信息安全保障的基本制度&#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.一个工厂发电的…