k8s的安装部署,详细过程展示(保姆级安装教程)

k8s应用部署方式演变

在部署应用程序的方式上,主要经历了三个时代:

传统部署:互联网早期,会直接将应用程序部署在物理机上

优点:简单,不需要其它技术的参与

缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

优点:程序环境不会相互产生影响,提供了一定程度的安全性

缺点:增加了操作系统,浪费了部分资源

容器化部署:与虚拟化类似,但是共享了操作系统

优点:

可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等

运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦

容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署

在这里插入图片描述

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
当并发访问量变大的时候,怎么样做到横向扩展容器数量
这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

Swarm:Docker自己的容器编排工具
Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用
Kubernetes:Google开源的的容器编排工具

在这里插入图片描述

关于k8s的知识我就不赘述了,这次主要实践k8s的安装部署

开始实验

实验环境:

主机 IP 系统 角色
153 192.168.121.153 centos7 master

154 192.168.121.154 centos7 node

155 192.168.121.155 centos7 node

!!!系统一定要2核或者以上,最少要求2核,内存2G或以上

首先在

三台机子都安装docker

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
cat > /etc/docker/daemon.json << EOF
{"registry-mirrors":["https://hub-mirror.c.163.com/"]}
EOF
systemctl start docker
systemctl enable docker.service

校正时间同步

timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate、
ntpdate   ntp.aliyun.com
timedatectl set-local-rtc 0

配置计划任务自动校正时间(可选,实验环境而已不做也没什么影响)

# crontab  -e    ---配置计划任务
01 */2 * * *  ntpdata   npt.aliyun.com# systemctl  restart crond.service

配置A记录互相解析

cat >>  /etc/hosts  << EOF
192.168.121.153 server153
192.168.121.154 server154
192.168.121.155 server155
EOF

关闭防火墙

iptables -F
systemctl  stop firewalld
systemctl disable firewalld
setenforce  0
sed -i  '/SELINUX=/c\SELINUX=disabled/'  /etc/selinux/config

关闭swap分区,否则会影响k8s的性能

swapoff -a
sed   -i    '/swap/s/.*/#&/'  /etc/fstab

设置内核及相关网络参数

modprobe   br_netfilter
modprobe  overlay
modprobe  ip_vs
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
ip_vs
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
sysctl -p /etc/sysctl.d/k8s.conf

然后制作k8s的阿里源

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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean  all
yum makecache fast

然后获取cri-docker安装包

wget https://github.com/Mirantis/cri-dockerd

安装git和go语言编译环境

yum install -y go  git

然后解压cri-docker并编译

tar -xf cri-dockerd.tar.gz
cd cri-dockerd/
make cri-dockerd

将 应用程序拷贝到PATH 环境下

install -o root -g root -m 0755 cri-dockerd    /usr/bin/cri-dockerd

安装 cri-dockerd 服务 systemd service控制文件

install packaging/systemd/*     /usr/lib/systemd/system/

配置systemd service文件

cat > /usr/lib/systemd/system/cri-docker.service << EOF               
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP 
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF

配置cri-docker.sockrt

cat > /usr/lib/systemd/system/cri-docker.socket  << EOF 
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=root[Install]
WantedBy=sockets.target
EOF

加载配置文件,启动cri-docker

systemctl  daemon-reload
systemctl  start     cri-docker.service
systemctl  enable  cri-docker.service

查看套接字文件是否启动

ls /var/run/cri-dockerd.sock

然后安装kubelet和kubeadm,用来连接API

yum install  kubelet-1.26.3  kubeadm-1.26.3 -y

三个节点都做相同的配置到这里就可以了

主节点的配置

然后到master节点的配置

下载kubectl

yum install kubectl-1.26.3

查看初始集群所需要的镜像

[root@server153 cri-dockerd]# kubeadm  config  images  list
I1107 20:01:31.050004    7050 version.go:256] remote version is much newer: v1.28.3; falling back to: stable-1.26
registry.k8s.io/kube-apiserver:v1.26.10
registry.k8s.io/kube-controller-manager:v1.26.10
registry.k8s.io/kube-scheduler:v1.26.10
registry.k8s.io/kube-proxy:v1.26.10
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3

查看镜像是因为官方站点在国外,有时候网络不好不一定能下,所以可以切换阿里源镜像,或者准备好镜像在自己的镜像仓库

然后开始初始化集群

[root@server153 cri-dockerd]# kubeadm  init  --apiserver-advertise-address=192.168.121.153  --kubernetes-version=v1.26.3  --image-repository  registry.aliyuncs.com/google_containers  --cri-socket unix:///var/run/cri-dockerd.sock  --service-cidr=10.1.0.0/16 --pod-network-cidr=10.2.0.0/16 --token-ttl=0

初始化好后结尾会如下提示

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.conf

然后执行下面两段代码

  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

还有这段token也记得复制

Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.121.153:6443 --token 3n3vlb.vpgsgfh6vf77tup0 \--discovery-token-ca-cert-hash sha256:c383079099cf763acc2631705cb7361d06e2156dd496ba35b348bfa03e230c36 

这段是node节点加入到集群的口令

做好上面这些之后最好重新连接一下会话,刷新配置

然后去node节点加入到集群 ,用刚才我们复制的口令加入集群
只需要执行下面这段命令就可以了

[root@server154 cri-dockerd]# kubeadm join 192.168.121.153:6443 --token 3n3vlb.vpgsgfh6vf77tup0 --discovery-token-ca-cert-hash sha256:c383079099cf763acc2631705cb7361d06e2156dd496ba35b348bfa03e230c36 --cri-socket unix:///var/run/cri-dockerd.sock

加入成功后会有下面字段的提示

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

然后我们就去master节点执行kubectl get nodes查看集群

[root@server153 cri-dockerd]# kubectl get nodes
NAME        STATUS     ROLES           AGE     VERSION
server153   NotReady   control-plane   8m20s   v1.26.3
server154   NotReady   <none>          2m2s    v1.26.3
server155   NotReady   <none>          98s     v1.26.3

可以看到集群加入成功

但是还有一个问题,那就是网络还没配置,所以状态才会显示NotReady

我们下载flannel,这里注意一个问题

因为是从github下载的,国内网络你们懂的,不一定能拉下载,只能多试几下或者网络好点再下

[root@server153 cri-dockerd]# cd   /etc/kubernetes/manifests
[root@server153 manifests]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

查看我们所需的镜像,等下也是要拉镜像的

[root@server153 manifests]# grep  "image:"  kube-flannel.ymlimage: docker.io/flannel/flannel:v0.23.0image: docker.io/flannel/flannel-cni-plugin:v1.2.0image: docker.io/flannel/flannel:v0.23.0

然后修改配置文件,改两个地方

[root@server153 manifests]# vim kube-flannel.yml

在这里插入图片描述

在这里插入图片描述

修改好以后就可以部署组件了

[root@server153 manifests]# kubectl apply  -f kube-flannel.yml

然后再查看集群状态

这个等待过程可能是比较久的,因为去国外站点拉镜像是有很慢的,看网络情况的

[root@server153 manifests]# kubectl get nodes
NAME        STATUS     ROLES           AGE   VERSION
server153   NotReady   control-plane   39m   v1.26.3
server154   NotReady   <none>          33m   v1.26.3
server155   NotReady   <none>          33m   v1.26.3
[root@server153 manifests]# kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
server153   Ready    control-plane   42m   v1.26.3
server154   Ready    <none>          36m   v1.26.3
server155   Ready    <none>          35m   v1.26.3

然后这样我们的k8s集群就部署好了,当然这个是单master节点的,不是高可用集群的

希望对大家有帮助。

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

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

相关文章

Java面向对象(进阶)-- 面向对象特征之三:多态性

文章目录 一、多态的形式和体现&#xff08;1&#xff09;为什么需要多态性(polymorphism)&#xff1f;&#xff08;2&#xff09; 对象的多态性 二、 多态的理解&#xff08;1&#xff09;如何理解多态性&#xff08;2&#xff09;Java中多态性的体现&#xff08;3&#xff09…

数据分析实战 | KNN算法——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型改进 十一、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://dow…

说说 React 性能优化的手段有哪些?

一、是什么 React凭借virtual DOM和diff算法拥有高效的性能&#xff0c;但是某些情况下&#xff0c;性能明显可以进一步提高 在前面文章中&#xff0c;我们了解到类组件通过调用setState方法&#xff0c; 就会导致render&#xff0c;父组件一旦发生render渲染&#xff0c;子组…

LeetCode146.LRU缓存

写了一个小时&#xff0c;终于把示例跑过了&#xff0c;没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同&#xff0c;没想到有18页的word&#xff0c;然后我一直检查终于找出了问题&#xff0c;而且这个bug真的太活该了&#xff0c…

Rocky Linux 配置邮件发送

Rocky Linux 配置邮件发送 使用自己的有邮箱发送 第一步-开启STMP授权 首先要开启STMP授权码&#xff0c;以QQ邮箱为例 第二步-下载安装包 说明一点不用命令行安装也可以&#xff0c;在命令行中输入会提示你是否安装s-nail&#xff0c;一直y即可 mail下载必须要的安装包 …

在ubuntu sudo apt-get update 更新报错

sudo apt-get update 更新报错 解决办法&#xff1a; 用你自己的key 根据上图自己找 sudo gpg --keyserver keyserver.ubuntu.com --recv-keys **********运行完成有一个ok 见下图 运行命令&#xff0c;中间的还是上面的key复制下来即可 sudo gpg --export --armor **********…

【华为OD机试AB高分必刷题目】拆分(Python-贪心算法实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试AB高分必刷题目】拆分(Python-贪心算法实现)题目描述解题思路Python题解代码代码OJ评判结果代码讲解寄语【华为OD机试AB高分必刷…

Android 多点触控

三种类型 :接力型 /配合型 /单独型 单点触控 package com.example.myapplication.viewimport android.content.Context import android.graphics.Canvas import android.graphics.Paint import android.util.AttributeSet import android.view.MotionEvent import android.vi…

HTTPS 的工作原理是什么?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种通过加密和认证保护数据传输安全的通信协议。它是基于传统的 HTTP 协议&#xff0c;通过使用 SSL&#xff08;Secure Sockets Layer&#xff09;或 TLS&#xff08;Transport Layer Security&#xff09…

mysql explain extra值枚举

Extra 值说明Using index仅使用索引进行数据查询Using where在取得所需数据前使用了 WHERE 子句进行过滤Using temporary使用了临时表来保存中间结果Using filesort查询中使用了文件排序Using join buffer告诉MySQL在内存中建立了一个表连接缓冲区以容纳连接类型为索引的行。Im…

CHATGPT----自然辩证法分析

CHATGPT----自然辩证法的要素&#xff0c;结构与功能 Chatgpt的要素组成&#xff1a; ChatGPT的构成主要包括语言模型、对话管理、知识库和用户接口等几个方面。 语言模型&#xff1a;ChatGPT的核心是语言模型&#xff0c;它是一种基于深度学习技术的自然语言处理模型&#…

IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录

本心、输入输出、结果 文章目录 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录前言查询 reflog 日志通过 Git Reset HEAD (hard) 找回已经 Drop Commit 的提交记录Git Reset HEAD (hard) 模式和 mixed 模式有啥区别git reset --h…

10 # 手写 every 方法

every 使用 every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 8];var result arr.ever…

win 命令替代鼠标的操作

操作方式都是在 winR 输入框输入或者终端输入 1、快速打开 控制面板 运行control 2、快速打开 电源选项 运行powercfg.cpl 3、快速打开 网络连接 运行ncpa.cpl 4、快速打开 程序和功能 运行appwiz.cpl 5、快速打开 Windows Defender防火墙 运行Firewall.cpl 6、快速打开 鼠标 …

Matlab的多项式留数与极点的计算

Matlab的多项式留数与极点的计算 以下面的多项式为例&#xff1a; 运算代码&#xff1a; clc clear closesyms p % 定义多项式 Zp(5*p^571*p^370*p)/(2*p^635*p^4117*p^236); % 提取分子与分母 [I,D]numden(Zp); Idouble(coeffs(I,p,"All"));%分子 Ddouble(coeffs…

多目标优化框架

随着模型越来越复杂&#xff0c;优化目标越来越多&#xff0c;传统算法都慢慢地无法胜任复杂优化任务&#xff0c;更为智能的优化方法也就应运而生了。其中有一类是进化优化算法&#xff0c;这类算法的思想来源是自然界的“优胜劣汰”法则&#xff0c;通过不停地保留好的个体最…

大漠插件(二、Qt使用插件时注意事项)

本章目的 在上篇已经注册完毕大漠&#xff0c;那么怎么使用大漠来制作脚本&#xff0c;我选择了我最熟悉的Qt来开发&#xff0c;毕竟只是小软件&#xff0c;用脚本或者c都差不了多少。本章就是开发途中的一些坑。 本人开发环境是 win11 64、Qt 5.15.2安装了5.10.0的msvc2015 32…

Java 和 JavaScript 有什么区别?

什么是Java&#xff1f; Java是一种OOP&#xff08;面向对象的编程语言&#xff09;、基于类的、具有VM&#xff08;虚拟机&#xff09;平台的多平台编程语言。OOP 是一种基于包含代码和数据的对象概念的编程范式。虚拟机可帮助您创建可在任何平台、任何地方灵活运行的编译程序…

服务器硬件有哪些组成

服务器是由处理器、硬盘、内存、显卡、主板、网卡等组成&#xff0c;今天小编带大家了解一下服务器有哪些硬件吧&#xff01; 1.最重要的当然就是处理器了&#xff0c;处理器就相当于是服务器的大脑&#xff0c;负责执行各种运算和指令&#xff0c;例如运行程序或者处理数据&am…

Linux - 基础IO(Linux 当中的文件,文件系统调用接口,文件描述符)- 上篇

前言 首先&#xff0c;关于文件我们最先要理解的是&#xff0c;文件不仅仅存储的是数据&#xff0c;一个文件包括 内容 数据。内容好理解&#xff0c;就是我们先要这文件存储哪一些数据&#xff0c;这些数据就是文件的内容。 但是&#xff0c;在计算机当中&#xff0c;有两种…