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.rhkb.cn/news/187027.html

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

相关文章

Python 的 datetime 模块

目录 简介 一、date类 &#xff08;一&#xff09;date 类属性 &#xff08;二&#xff09;date 类方法 &#xff08;三&#xff09;实例属性 &#xff08;四&#xff09;实例的方法 二、time类 &#xff08;一&#xff09;time 类属性 &#xff08;二&#xff09;tim…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息&#xff1b; 2)分用:就是解析这些信息 3)发送数据的时候&#xff0c;上层协议要把数据交给下层协议&#xff0c;由下层协议来添加一些信息 4)接收数据的时候&#xff0c;下层协议要把数据交给上层协议&#…

Python初学者软件以及如何安装和配置,新手入门必看系列。

文章目录 前言一、Python软件二、集成开发环境&#xff08;IDE&#xff09;1.PyCharm2.Spyder3.IDLE 三、包管理工具四、使用Python虚拟环境总结Python技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例6、清华编程大佬出品《漫画看学…

探索云世界的无限可能

文章目录 每日一句正能量前言云计算的定义和现状云计算能做什么&#xff1f;云计算市场的新特征需求方向&#xff1a;云计算的基础服务已经稳固&#xff0c;行业解决方案是新的发力点模式方向&#xff1a;分布式云模式方向&#xff1a;边缘计算是一朵新的云技术方向&#xff1a…

AMESim 2021安装教程

主要是AMESim的安装 写在前面&#xff0c;由于项目需要&#xff0c;需要自学AMESim&#xff0c;因此需要安装这个软件&#xff0c;目前仅仅安装使用&#xff0c;还不涉及到与MATLAB的联合仿真&#xff0c;老板说用 RT LAB半实物仿真平台&#xff0c;但是简单搜了一下&#xff0…

ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1sRHKBOyc3zu1v0qw4dSASA?pwd7nb0 提取码&#xff1a;7nb0 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序所需要工具&#xff1a;16G或以上…

麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包

原文链接&#xff1a;麒麟KYLINIOS软件仓库搭建03-软件仓库添加新版本的软件包 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟桌面操作系统软件仓库搭建的文章03-软件仓库添加新版本的软件包&#xff0c;本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版…

Vite项目的初体验 - 非Vite脚手架版本

开箱即用 &#xff08;out of box&#xff09;: 无需做任何的配置&#xff0c;就可以用vite来帮助我们处理构建工作。 前提 &#xff1a;node 版本 > 12.0.0&#xff0c;使用 npm 进行依赖管理。 本文的案例&#xff0c;从0到1的&#xff0c;一步一步的体会vite的作用。 本文…

图解三傻排序 选择排序、冒泡排序、插入排序

&#xff08;1&#xff09;选择排序 // 交换 void swap(int arr[], int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; }// 选择排序 void selectionSort(int arr[],int len) {if (len < 2) return;for (int minIndex, i 0; i < len - 1; i) {minIndex i;f…

WPS的JS宏基础(一)

基础知识 1、简单的第一个宏 //注意function只能全部用小写 function demo(){alert("你好!") }2、录制宏生成工资条 function 使用录制宏自动生成代码以JS宏为例()//使用相对引用 {Selection.Copy(undefined);ActiveCell.Offset(5, 0).Range("A1:M4").I…

Ubuntu22.04 下 NFS 相关问题与完整配置(客户机 MacOS)

categories: [Linux-Shell] tags: Linux NFS 写在前面 最近折腾一下 NFS, 先白嫖一顿华子云的 1 个月服务器, 2C4G 感觉不错了, 但NFS 配置起来还是有点难度, 主要还是随机分配的端口配置方面比较恶心. server环境: 华为云 2C4G Ubuntu22.04 client环境: MacOS M1 with brew …

排序算法的分析及实现

目录​​​​​​​ 1. 排序 1.1. 排序的概念 1.2. 排序的稳定性 1.3. 内部排序和外部排序 2. 直接插入排序 2.1. 直接插入排序 2.2. 直接插入排序的两种情况 1. 情况一 2. 情况二 2.3. 直接插入排序的单趟排序 2.4. 直接插入排序的完整实现 2.5. 直接插入排序的时…

接收表单数据

如果您尝试按下提交按钮&#xff0c;浏览器将显示“Method Not Allowed”错误。这是因为到目前为止&#xff0c;前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单&#xff0c;但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域…

selenium xpath定位

selenium-xpath定位 <span style"background-color:#2d2d2d"><span style"color:#cccccc"><code class"language-javascript">element_xpath <span style"color:#67cdcc"></span> driver<span styl…

有什么可以自动保存微信文件的方法么?

8-3 本文要介绍的方法&#xff0c;可以自动帮你保存微信上收到的文件型数据&#xff0c;比如文件、图片、视频&#xff0c;如果你的工作需要每天或者经常保存大量的从微信收到的文件型数据&#xff0c;也许本文适合你&#xff0c;本文介绍的工具&#xff0c;对微信多开也有效果…

Git安装配置保姆级教程和Git创建仓库的基本原理和常用命令

目录 前言 一、Git简介 1.Git 与 SVN 区别点 2.Git的介绍 3.Git 工作流程 4.Git 工作区、暂存区和版本库 二、Git安装配置 1.Linux 平台上安装 2.Windows 平台上安装 三、Git 创建仓库和下载 1、首先需要注册一个gitee账号 2.git初始化并提交到远程仓库 3.另一用户…

STM32 蜂鸣器介绍 配置 播放音节

蜂鸣器一般被分为两类&#xff1a;有源蜂鸣器和无源蜂鸣器。其中源是振荡源。有源蜂鸣器内部有振荡电路&#xff0c;可以把直流电源转换为一定频率的脉冲信号。因为它一直输出一定的频率&#xff0c;我们无法改变频率&#xff0c;所以声音只有一种&#xff0c;我们只能通过电源…

表象变换与矩阵元

表象变换 一维粒子哈密顿量 表象中的矩阵元 态的表象变换 不难证明 算符的表象变换 坐标表象 Non-denumerable basis

高校教务系统登录页面JS分析——长沙理工大学教务系统

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文将是本专栏最后一篇文章&#xff0c;我看了绝大多数高…

微信小程序:js实现不改变原数组的情况下增加一条对象到新数组中

效果 核心 old_array.slice(0) 表示对 old_array 这个数组进行切片操作&#xff0c;从索引 0 开始&#xff08;包括索引 0&#xff09;&#xff0c;直到数组的末尾&#xff0c;old_array.slice(0) 中的 0 表示开始切片的索引位置&#xff0c;而由于没有传入第二个参数&#xff…