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

news2024/10/6 6:01:56

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/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

然后执行下面两段代码

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo 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.yml
        image: docker.io/flannel/flannel:v0.23.0
        image: docker.io/flannel/flannel-cni-plugin:v1.2.0
        image: 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.coloradmin.cn/o/1193467.html

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

相关文章

PanNet: A deep network architecture for pan-sharpening(ICCV 2017)

文章目录 AbstractIntroduction过去方法存在的问题我们提出新的解决方法Related work PanNet: A deep network for pan-sharpening&#xff08;PanNet:用于泛锐化的深度网络&#xff09;Background and motivationPanNet architectureSpectral preservationStructural preserva…

网络原理---拿捏HTTP协议:请求和响应

文章目录 认识请求首行URLURL的格式URL的encode和decode 版本号方法GET方法POST方法GET VS POST 请求头&#xff1a;headerHostContent-Length 和 Content-TypeUser-Agent&#xff08;UA&#xff09;RefererCookie 空行正文&#xff1a;body如何构造HTTP请求&#xff1f;浏览器…

浙大恩特客户资源管理系统任意文件上传漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源&#xff0c;提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中fileupload.jsp接口处存在文件上传漏洞&#xff0c;未经身份认…

rv1126-rv1109-添加分区,定制固件,开机挂载功能

===================================================================== 修改分区: 这里是分区的txt文件选择; 这里是分区的划分,我这里回车了,方便看 FIRMWARE_VER: 8.1 MACHINE_MODEL: RV1126 MACHINE_ID: 007 MANUFACTURER: RV1126 MAGIC: 0x5041524B ATAG: 0x00200…

Ubuntu18.04.6共享文件夹的创建,以及在哪打开共享文件夹

目录 1、打开虚拟机的设置页面 2、设置共享文件夹 3、确认是否成功设置共享文件夹 4、完成后在进入到/mnt/hgfs ls查看&#xff0c;发现共享文件夹已经出现可以使用 1、打开虚拟机的设置页面 两种方式&#xff1a; &#xff08;1&#xff09;直接点击“编辑虚拟机设置” …

android自定义switch颜色

效果图&#xff1a; 原生样式和自己app的主题颜色不搭配&#xff0c;就可以这样自定义颜色样式。以下代码均可直接复制粘贴使用&#xff0c;且均有注释。 实现&#xff1a; 1、 新建drawable/switch_custom_thumb_on.xml&#xff08;滑块开启状态 &#xff09; <?xml ve…

DDD系列 - 第2讲 从贫血模型、事务脚本到面向对象(富血模型)、DDD领域模型的跨越

目录 一、灵魂拷问二、CRUD Boy现状三、贫血模型四、事务脚本五、从贫血模型演变到面向对象&#xff08;富血模型&#xff09;六、借助DDD领域模型摆脱事务脚本七、更多 一、灵魂拷问 Java作为面向对象的编程语言&#xff0c;使用Java编程的你面向对象了吗&#xff1f; 二、C…

“三位一体”超级混沌工程主要特点及功能

“三位一体”超级混沌工程X-Chaos主要包括基础故障编排、业务场景故障编排、演练场景编排、故障库管理、演练场景管理、演练计划管理、演练观测和演练报告等模块&#xff0c;支持对传统架构、云环境以及国产化基础环境的IT系统进行故障演练。本文将介绍混沌工程主要特点及主要功…

剪贴板劫持--PasteJacker的使用

启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统&#xff0c;这里以Windows系统为例&#xff0c;即我自己的物理机 因此键入 1 &#xff0c;回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…

现在就是成为“新程序员”的黄金时刻!

整理 | 王启隆 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “自然语言代替了编程语言&#xff0c;大大地降低了程序员的门槛。现在&#xff0c;ChatGPT 将全球的知识库和代码都放在了你的手中&#xff0c;只要有想象力&#xff0c;人人都能成为「新程序员」…

一周成功拿下4个offer的软件测试面试题,面试必看系列

前言&#xff1a; 压到就是赚到&#xff0c;面试通过的机率就更大&#xff0c;干就完了铁子 【文章末尾给大家留下了大量的福利】 ​编辑 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平…

腾讯云2023年双11活动:云服务器1.8折起,还可领取9999元代金券!

2023年双11腾讯云推出了11.11云上盛惠大促活动&#xff0c;包括秒杀专区、服务器买赠、新人专区、代金券专区、境外优选、新老同享、续费专区以及热门上云场景等满足新用户、老用户、企业用户对云计算服务的各种需求。 一、腾讯云双11活动地址 活动入口&#xff1a;点此直达 …

【高等数学】导数的应用

导数的应用 1、洛必达法则1.1、引例1.2、内容1.3、证明1.4、洛必达的应用总结 1.5、注意 2、泰勒公式2.1、解决的问题2.2、引例2.3、内容2.3.1、带Peano余项的泰勒公式2.3.2、带Lagrange余项的泰勒公式2.3.3、麦克劳林公式2.3.4、几个初等函数的麦克劳林公式 2.4、证明2.5、泰勒…

智慧城市建设解决方案分享【完整】

文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据&#xff1a;智慧城市的智慧引擎4.1 大数据技术—智慧城…

css实战——清除列表中最后一个元素的下边距

需求描述 常见于列表的排版&#xff0c;如文章列表、用户列表、商品列表等。 代码实现 <div class"listBox"><div class"itemBox">文章1</div><div class"itemBox">文章2</div><div class"itemBox"…

java语法:继承与多态

导言: 在Java中&#xff0c;继承和多态是面向对象编程的两个重要概念&#xff0c;它们允许我们创建更加灵活和可扩展的代码。本文主要对继承和多态的语法和一些细节做一个介绍和解释。 目录 导言: 正文&#xff1a; 一.继承 1. 基本语法 2. 继承的特点 3.子类中访问父类…

新品上市|米尔RZ/G2UL核心板上市,助力工业4.0发展!

浩瀚的芯片海洋中能被人记住的寥寥无几&#xff0c;那些在人们脑海中留下印记的往往是踩中了时代的脉搏。32位ARMv7架构的A7/A8系列处理器自发布以来&#xff0c;以ARM9处理器的价格&#xff0c;升级了工业领域绝大部分应用需求&#xff0c;成为最近十年最受欢迎的通用工业级AR…

怎么写日语开发信?写外贸日语开发信技巧?

如何写好日语开发信&#xff1f;日语开发信格式是怎么样的&#xff1f; 无论您是初学者还是有经验的营销专家&#xff0c;都需要掌握一些关键技巧&#xff0c;以确保您的邮件在日本市场取得成功。蜂邮将向您介绍怎样写一封令人印象深刻的日语开发信&#xff0c;以吸引潜在客户…

2022年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列不是评判一个算法优劣的标准是?( ) A: 时间复杂度 B: 空间复杂度 C: 难易度 D: 健壮性 答案:C 评价算法的优劣是:时间复杂度,空间复杂度,健壮性,正确性,可读性。因此选…

Laplacian Redecomposition for Multimodal Medical Image Fusion

LRD方法 GDIE means ‘gradient-domain image enhancement’&#xff0c;DGR means ‘decision graph redecomposition’ MLD means ‘maximum local difference’ LEM means ‘local energy maximum’&#xff0c;OD means ‘overlapping domain’&#xff0c;LP means ‘L…