Kubernetes安装

Kubernetes安装

二进制安装

暂无

Kubeadm安装

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

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

1、准备工作

  • 准备至少2台服务器,配置(CPU核心数>=2,内存>=2G,硬盘>=30GB)
  • 操作系统初始化:关闭防火墙,关闭selinux,关闭swap

其中:

禁用iptable和firewalld服务

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

# 关闭防火墙
systemctl stop firewalld# 禁用 firewalld 服务
systemctl disable firewalld
禁用selinux

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

# 临时关闭【立即生效】
setenforce 0# 永久关闭【重启生效】
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config
禁用swap分区:

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,

因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 临时关闭【立即生效】
swapoff -a# 永久关闭【重启生效】
sed -ri 's/.*swap.*/#&/' /etc/fstab
主机重命名,添加hosts工作
# 主机重命名
# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname k8s-master
# 根据规划设置主机名【node1节点操作】
hostnamectl set-hostname k8s-node1
# 根据规划设置主机名【node2节点操作】
hostnamectl set-hostname k8s-node2
...
# 主机添加hosts
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.12.130 k8s-master
192.168.12.131 k8s-node1
192.168.12.132 k8s-node2
EOF
配置时间同步
yum install ntpdate -y
ntpdate cn.pool.ntp.org
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
service crond restart
安装基础软件包
yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl- devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
安装docker:方便拉取和build镜像

直接使用deploy_cloud项目中的安装docker脚本进行安装处理,并修改docker的配置文件:

vi /etc/docker/daemon.json

{"registry-mirrors":["https://lmy14a53.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]"data-root": "/netease/lib/docker"
}
安装containerd运行时(k8s-1.24版本开始放弃使用docker)
# 安装containerd
yum install containerd.io-1.6.6 -y
# 生成containerd配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改配置文件 /etc/containerd/config.toml
SystemdCgroup = false ==> SystemdCgroup = true
sandbox_image = "k8s.gcr.io/pause:3.6" ==> sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
# 配置containerd开机启动
systemctl enable containerd --now# 修改/etc/crictl.yaml文件
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
# 重启containerd
systemctl restart containerd# 配置containerd镜像加速器
vim /etc/containerd/config.toml
找到 config_path = "",修改成如下目录: config_path = "/etc/containerd/certs.d"
# 创建目录,写入内容
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml 
[host."https://lmy14a53.mirror.aliyuncs.com",host."https://registry.docker-cn.com"] capabilities = ["pull"]
# 重启containerd
systemctl restart containerd
将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF# 生效
sysctl --system 
内核模块开机挂载ipvs
cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 加载内核模块到当前的内核
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe nf_conntrack

查看是否ipvs加载

lsmod |grep -e ip_vs -e nf_conntrack

2、正式安装

配置安装 k8s 组件需要的阿里云的repo源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubelet kubeadm kubectl
yum makecache
# 安装kubelet kubeadm kubectl
yum install -y --nogpgcheck kubelet kubeadm kubectl
# 查看kubelet版本
yum list kubelet --showduplicates | sort -r |grep 1.28
使用kubeadm安装kuberetes
# 查看镜像列表
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2
# 拉取kubernets所需的镜像 
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2 --cri-socket=unix:///run/containerd/containerd.sock其中,--cri-socket指定了运行时接口的套接字,这里我们使用的是containerd,故制定了containerd的套接字路径(/run/containerd/containerd.sock)
主节点初始化
kubeadm init --kubernetes-version=v1.28.2  --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///run/containerd/containerd.sock

初始化成功输出提示信息:

Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.2.48:6443 --token bc9npq.wi1l2hfqun9zp8u5 \--discovery-token-ca-cert-hash sha256:0ad7500cb4e8926965fe4f7e0c0ab5d24f53279bf5e4a31ae5befdcd730fd78b

此时我们可以通过join命令将node节点添加到master节点上去:

kubeadm join 192.168.2.48:6443 --token bc9npq.wi1l2hfqun9zp8u5 \--discovery-token-ca-cert-hash sha256:0ad7500cb4e8926965fe4f7e0c0ab5d24f53279bf5e4a31ae5befdcd730fd78b

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command

此时我们在主节点上使用kubectl查看一下kubernetes的节点状态:

kubectl get nodesNAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   8m25s   v1.28.2
k8s-node1    NotReady   <none>          3m57s   v1.28.2

然后我们查看一下kube-system的命令空间节点状态:

NAME                                 READY   STATUS    RESTARTS   AGE
coredns-66f779496c-hlm4k             0/1     Pending   0          8m55s
coredns-66f779496c-hpqvj             0/1     Pending   0          8m55s
etcd-k8s-master                      1/1     Running   0          8m59s
kube-apiserver-k8s-master            1/1     Running   0          8m59s
kube-controller-manager-k8s-master   1/1     Running   0          8m59s
kube-proxy-q5xmj                     1/1     Running   0          4m35s
kube-proxy-sq2zn                     1/1     Running   0          8m55s
kube-scheduler-k8s-master            1/1     Running   0          8m59s

此时发现是coredns这个pod在pending,此时我们部署CNI网络插件,来进行联网访问:

这里存在两个网络插件:flannel和calico

# flannel 
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml# calico
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml -O 
kubectl apply -f calico.yaml

请注意:

  • calico默认POD网络:192.168.0.0/16,若集群pod网络不是192.168.0.0/16则需要修改calico.yaml文件的默认地址

  • flannel默认的pod网络为10.244.0.0/16

这里我们使用的是calico网络插件,执行以后,再分别查看node和kube-system命名空间的状态,可得:

> kubectl get node
NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   121m   v1.28.2
k8s-node1    Ready    <none>          117m   v1.28.2> kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-7c968b5878-w5zgn   1/1     Running   0          8m57s
calico-node-frzt9                          1/1     Running   0          8m57s
calico-node-tj8vz                          1/1     Running   0          8m57s
coredns-66f779496c-hlm4k                   1/1     Running   0          124m
coredns-66f779496c-hpqvj                   1/1     Running   0          124m
etcd-k8s-master                            1/1     Running   0          124m
kube-apiserver-k8s-master                  1/1     Running   0          124m
kube-controller-manager-k8s-master         1/1     Running   0          124m
kube-proxy-q5xmj                           1/1     Running   0          120m
kube-proxy-sq2zn                           1/1     Running   0          124m
kube-scheduler-k8s-master                  1/1     Running   0          124m

此时通过kubeadm搭建一个简单的一主一工作节点的Kubenetes集群成功。这里顺便简单介绍一下我们安装kubernetes这些必备工具的作用:

kube-apiserver:

  • 作用:它是 Kubernetes API 服务器,是集群的控制面,所有的操作和通信都是通过它进行的。

kube-controller-manager:

  • 作用:它运行控制器进程,这些控制器是集群的后台线程,处理常规任务。例如,当副本数量不足时,副本控制器会负责启动新的 Pod。

kube-scheduler:

  • 作用:负责调度 Pod 到集群中的节点上,它选择最合适的节点来运行未调度的 Pod。

kube-proxy:

  • 作用:运行在每个节点上,维护节点网络规则并实现服务的 IP 虚拟化。

etcd:

  • 作用:它是一个键值存储,用于保存所有集群数据,是 Kubernetes 集群的后台数据库。

coredns (或 kube-dns):

  • 作用:提供 DNS 服务给集群内部的服务发现。

kubectl:

  • 作用:虽然 kubectl 不是一个 Pod,但它是一个命令行工具,用于与集群交互和管理资源。

除了这些核心组件,根据你的集群安装方式和配置,可能还会见到以下一些系统组件的 Pods:

Container Network Interface (CNI) 插件的 Pods(如 Calico, Flannel, Weave 等):负责配置节点间的网络,以使得 Pod 间可以通信。

Ingress controller Pods(如 Nginx-Ingress, Traefik 等):负责处理入站连接并将流量路由到集群内的服务。

Storage provisioner Pods(如 Local Persistent Volume Provisioner):负责自动创建存储资源,供集群使用。

Metrics Server 或其他监控工具的 Pods:用于收集节点和 Pod 的资源使用情况。

参考安装博客:

https://developer.aliyun.com/article/1401364

https://lixx.cn/archives/1702371695143

https://blog.csdn.net/weixin_58140255/article/details/129837297

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

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

相关文章

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意&#xff1a;ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

代码随想录day33 Java版

96.不同的二叉搜索树 递推公式不好想&#xff0c;在根节点的左右组装&#xff0c;从dp[0]*dp[n-1]到dp[n-1]*dp[0]累加 class Solution {public int numTrees(int n) {//初始化 dp 数组int[] dp new int[n 1];//初始化0个节点和1个节点的情况dp[0] 1;dp[1] 1;for (int i …

用信号的方式回收僵尸进程

当子进程退出后&#xff0c;会给父进程发送一个17号SIGCHLD信号&#xff0c;父进程接收到17号信号后&#xff0c;进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后&#xff0c;这是切回到父进程&#xff0c;此时父进程只会处理一个17号信号&#xff0c;其他…

植物病害识别:YOLO水稻病害识别/分类数据集(2000多张,2个类别,yolo标注)

YOLO水稻病害识别/分类数据集&#xff0c;包含疾病和正常2类&#xff0c;共2000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

解决input事件监听拼音输入法导致高频事件

1、业务场景 在文本框中输入内容&#xff0c;执行查询接口&#xff0c;但遇到一个问题&#xff0c;当用拼音打字写汉字去搜索的时候&#xff0c;会输入一些字母拼成汉字&#xff0c;怎么能监听等拼音文字输入完成后再触发文本框监听事件 2、解决方案 通过查阅资料得知在输入中…

算法学习11:树与图的 DFS、BFS

算法学习11&#xff1a;树与图的 DFS、BFS 文章目录 算法学习11&#xff1a;树与图的 DFS、BFS前言一、树与图的深度优先遍历1.例题&#xff1a;树的重心&#xff1a; 二、树与图的宽度优先遍历1.例题&#xff1a;图中点的层次&#xff1a; 三、拓扑排序&#xff1a;&#xff0…

vue.js 页面中设置多个swiper

效果&#xff1a; 设置主要设置了 动态的 包含类、 左右按钮的类 <template><div class"swiper-container_other"><!-- 右侧按钮 --><div :class"[(id)?swiper-button-nextid:swiper-button-next, swiper-button-next]"></div…

浅易理解:卷积神经网络(CNN)

浅易理解卷积神经网络流程 本文的目录&#xff1a; 1 什么卷积神经网络 2 输入层 3 卷积层 4 池化层 5 全连接层 1 什么是卷积神经网络 1.1卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09; 是一种前馈神经网络&#xff0c;它的人工神经元可以响应一…

golang中new和make的区别

1. 先看一个例子 package mainimport "fmt"func main() {var a *int*a 10fmt.Println(*a) }运行结果是啥呢&#xff1f; 问&#xff1a;为什么会报这个panic呢&#xff1f; 答&#xff1a;因为如果是一个引用类型&#xff0c;我们不仅要声明它&#xff0c;还要为…

Linux命令-权限管控

Linux命令-权限管控 目录 Linux命令-权限管控rootsu&#xff08;switch user&#xff09;sudo用户、用户组查看权限管控信息修改权限控制chmodchown 对于Linux中权限的讲解以及对权限的一些操作 root 超级管理员&#xff0c;拥有最大系统操作权限普通用户一般在其HOME目录内是…

Leetcode 675 为高尔夫比赛砍树

文章目录 1. 题目描述2. 我的尝试3. 题解1. BFS 1. 题目描述 Leetcode 675 为高尔夫比赛砍树 2. 我的尝试 typedef priority_queue<int, vector<int>, greater<int>> heap;class Solution { public:int m;int n;int bfs(vector<vector<int>>&…

mysql使用命令给指定用户配置表权限

记录使用命令为用户配置表权限&#xff0c;可用于使用Navicat工具配置权限报错场景下使用&#xff1a; 首先进如部署MYSQL的服务器&#xff0c;然后开始按照以下步骤操作 1、登录mysql程序&#xff1a; 命令&#xff1a;mysql -u wl-prod -p 密码&#xff1a;root 2、切换数…

写一个去除数组中重复元素的函数

1.使用ES6的Set数据结构 Set是一种只存储唯一值的数据结构&#xff0c;因此任何重复的元素都会被自动忽略。然后&#xff0c;我们使用扩展运算符…将Set对象转换回数组&#xff0c;并返回这个新的数组。 请注意&#xff0c;这种方法会改变原始数组中元素的顺序&#xff0c;因…

2024中国(京津冀)太阳能光伏推进大会暨展览会

2024年中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业发展的重要会议和展览会。该活动将在中国的京津冀地区举行&#xff0c;旨在汇聚全球太阳能光伏领域的专业人士、政府代表、企业家和科研人员&#xff0c;共同探讨太阳能光伏技术的最新进展和未来发展…

数据集成工具 ---- datax 3.0

1、datax: 是一个异构数据源离线同步工具&#xff0c;致力于实现关系型数据库&#xff08;mysql、oracle等&#xff09;hdfs、hive、hbase等各种异构数据源之间的数据同步 2、参考网址文献&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md 3、Da…

避抗指南:如何寻找OLED透明屏供应商

寻找OLED透明屏供应商&#xff0c;你可以按照以下步骤进行&#xff1a; 明确需求&#xff1a;首先&#xff0c;你需要明确自己的需求&#xff0c;包括所需OLED透明屏的尺寸、分辨率、亮度、色彩饱和度等具体参数&#xff0c;以及预算和采购量。这有助于你更精准地找到符合需求的…

【sgPhotoPlayer】自定义组件:图片预览,支持点击放大、缩小、旋转图片

特性&#xff1a; 支持设置初始索引值支持显示标题、日期、大小、当前图片位置支持无限循环切换轮播支持鼠标滑轮滚动、左右键、上下键、PageUp、PageDown、Home、End操作切换图片支持Esc关闭窗口 sgPhotoPlayer源码 <template><div :class"$options.name"…

革命性创新:聚道云软件连接器如何为企业重塑财务管理流程?

一、客户介绍 某科技股份有限公司是一家专注于高性能存储技术领域的创新型科技公司。自公司成立以来&#xff0c;该公司始终秉持创新发展的理念&#xff0c;致力于为客户提供卓越的存储解决方案&#xff0c;以满足不同行业对数据存储的需求。作为业界的佼佼者&#xff0c;该公…

SpringBoot(依赖管理和自动配置)

文章目录 1.基本介绍1.springboot是什么&#xff1f;2.快速入门1.需求分析2.环境配置1.确认开发环境2.创建一个maven项目3.依赖配置 pom.xml4.文件目录5.MainApp.java &#xff08;启动类&#xff0c;常规配置&#xff09;6.HelloController.java &#xff08;测试Controller&a…