k8s部署及安装

news2024/12/24 20:36:22

1.1、Kubernetes 简介及部署方法

在部署应用程序的方式上面,主要经历了三个阶段

006f88db240d4edb922acfb3aa55f1d9.png

 

传统部署:互联网早期,会直接将应用程序部署在物理机上
优点:简单,不需要其它技术的参与
缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

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

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

缺点:增加了操作系统,浪费了部分资源
容器化部署:与虚拟化类似,但是共享了操作系统
容器化部署方式给带来很多的便利,但是也会出现一些问题:
一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器当并发访问量变大的时候,怎么样做到横向扩展容器数量

1.2 容器编排应用

为了解决这些容器编排问题,就产生了一些容器编排的软件:

·Swarm: Docker自己的容器编排工具

· Mesos: Apache的一个资源统一管控的工具,需要和Marathon结合使用

·Kubernetes: Google开源的的容器编排工具

1.3kubenets简介

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年 Borg系统运行管理着成千上万的容器应用。

 Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:
自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本 存储编排:可以根据容器自身的需求自动创建存储卷

2.1 k8s 环境部署说明

 
1.habor仓库:
主机名 docker-hub 
ip 172.25.254.250
 
2.master k8s集群控制节点 :
主机名 k8s-master.tininglee.org
ip 172.25.254.100
 
3.worker k8s集群工作节点
主机名 k8s-node1.timing.org
ip 172.15.254.10
 
4.worker k8s集群工作节点
主机名 k8s-node2.timing.org
ip 172.25.254.20
 
1.所有节点禁用selinux防火墙
2.所有节点同步时间和解析
3.所有节点安装docker-ce
4.所有节点禁用swap,注意注释掉/etc/fstab文件中的定义
 
1.
systemctl disabled firewalld
systemctl stop firewalld
grubby --update-kernel ALL --args selinux=0
 
2.
vim /etc/rc.d/rc.local
swapoff /dev/dm-1
chmod +x /etc/rc.d/rc.local
3.
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.100 k8s-master
172.25.254.10 k8s-node1.timinglee.org
172.25.254.20 k8s-node2.timinglee.org
172.25.254.250 reg.timinglee.org
4.cat /etc/yum.repos.d/docker-ce.repo 
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
dnf install docker-ce -y

2.2安装k8s部署工具

[root@k8s-master ~]# cat /etc/yum.repos.d/k8s.repo 
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0
 
dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

设置kubectl命令补齐功能

[root@k8s-master ~]# yum install bash-completion -y

[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc[root@k8s-master ~]# source ~/.bashrc

在所有节点安装cri-docker

root@k8s-master ~l#ls

cri-dockerd -0.3.14-3.el8.x86 64.rpm

libcgroup-0.41-19.el8.x86 64.rpm

[root@k8s-master ~]# yum install *.rpm -y

root@k8s-master~l#systemctl enable --now cri-dockerCreated symlink /etc/systemd/'svstem/multi-user.target.wantscr-docker.sevice - /usr/lib/systemd/svstem/cri-docker.service[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service

[Unit]

Description=CRl 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

[root@k8s-master ~]# systemctl daemon-reload[root@k8s-master ~]# systemctl start cri-docker[root@k8s-master ~]#ll /var/run/cri-dockerd.sock

srw-rw---- 1 root docker 1 0 月 10 23:19 /var/run/cri-dockerd.sock #cri-dockerd的套接字文件

在master节点拉取k8s所需镜像

#拉取k8s集群所需要的镜像

[root@k8s-master ~]# kubeadm config images pull \

--image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0\

--cri-socket=unix:///var/run/cri-dockerd.sock

[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'

[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'

ed063149d1a64b60b585c2ba273cc633.png

 3.集群初始化

启动kubelet服务

#执行初始化命令
[root@k8s-master ~]# kubeadm init --pod-network-cidr=192.188.0.0/16\ --image-repository reg.timinglee.org/k8s \ --kubernetes-version v1.30.0\
--cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock    #重置集群    
#指定集群配置文件变量
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile#当前节点没有就绪,因为还没有安装网络插件,容器没有运行[root@k8s-master ~]# kubectl get node
NAME    STATUS ROLES    AGE VERSION    
k8s-master.timinglee.org NotReady control-plane 4m25s v1.30.0
root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME    READY STATUS RESTARTS AGE    
kube-system coredns-647dc95897-2sgn8    0/1 Pending 0    6m13s    
kube-system coredns-647dc95897-bvtxb    0/1 Pending 0    6m13s    
kube-system etcd-k8s-master.timinglee.org    1/1 Running 0    6m29s    
kube-system kube-apiserver-k8s-master.timinglee.org    1/1 Running 0    6m30s    
kube-system kube-controller-manager-k8s-master.timinglee.org 1/1 Running 0    6m29s    
kube-system kube-proxy-fq85m    1/1 Running 0    6m14s    
kube-system kube-scheduler-k8s-master.timinglee.org    1/1 Running 0    6m29s

 

a8c38523f1384ff6b40cdfbc1fe7f06f.png

 

指定网络插件

 [root@k8s-master ~]# vim kube-flannel.yml   

image: reg.timinglee.org/flannel/flannel:v0.25.5

image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 image: reg.timinglee.org/flannel/flannel:v0.25.5

[root@k8s-master ~]# docker load -i flannel-0.25.5.tag.gz

先建立flannel项目

[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.timinglee.org/flannel/flannel:v0.25.5[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5

[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.timinglee.org/flannel/flannei[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1安装

[root@k8s-master ~]# kubectl apply -f kube-flannel.yml测试

[root@k8s-master ~]# kubectl get nodes

NAME STATUS ROLES AGE VERSION 

k8s-master.timinglee.org Ready control-plane 17m v1.30.5

将工作加入集群

kubeadm join 172.25.254.100:6443 --token5hwptm.zwn7epa6pvatbpwf--discovery-token-ca-cert-hashsha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock

62299a21d1b94185be76c9f57f3dddfd.png

 

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

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

相关文章

量化交易四大邪术终章:春梦了无痕

做量化交易有些年头了&#xff0c;见过的策略也成百上千了&#xff0c;前段时间突发奇想&#xff0c;想揭露一些“照骗”策略&#xff0c;尽自己所能减少一些上当受骗的人数&#xff0c;于是写了一个量化邪术系列。 为什么叫量化交易邪术呢&#xff1f;因为在古早的简中网络中&…

netdata保姆级面板介绍

netdata保姆级面板介绍 基本介绍部署流程下载安装指令选择设置KSM为什么要启用 KSM&#xff1f;如何启用 KSM&#xff1f;验证 KSM 是否启用注意事项 检查端口启动状态 netdata和grafana的区别NetdataGrafananetdata各指标介绍总览system overview栏仪表盘1. CPU2. Load3. Disk…

TreeMap和TreeSet

前言 在了解TreeSet和TreeMap之前&#xff0c;先让我们介绍一下搜索树的概念。 1. 搜索树 二叉搜索树又称二叉排序树&#xff0c;这颗树要么是一棵空树&#xff0c;要么是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节…

[Qt] 信号与槽:深入浅出跨UI与跨线程的信号发送

文章目录 如何自定义信号并使用自定义信号的步骤1.使用 signals 声明信号2. 信号的返回值是 void3. 在需要发送信号的地方使用 emit4. 使用 connect 链接信号和槽5. 完整代码示例总结 如何跨UI发送信号Qt跨UI发送信号机制详解案例概述Qt 信号与槽机制简介代码逻辑详解主窗口 Wi…

九APACHE

## 一 、HTTP协议与URL * HTTP协议&#xff1a;超文本传输协议&#xff0c;用于从Web服务器传输超文本到本地浏览器的传输协议&#xff0c;属于应用层协议。 超文本语言&#xff0c;用来创建超文本文件的标签 * URL&#xff1a;统一资源定位符&#xff0c;是互联网上标准资源…

centos 8.4学习小结

1.权限委派 2.vim快捷方式 2.1非正常关闭文本处理方式 2.2快捷方式 2.3TAB键补齐安装包 [ rootcloud Packages]# rpm -ivh bash-completion-2.7-5.el8.noarch.rpm 2.4#history 查询历史记录 [rootcloud ~]# vim /etc/profile HISTSIZE1000&#xff08;默认保存1000条历史记…

基于SSM的老年人身心健康监管平台

文未可获取一份本项目的java源码和数据库参考。 选题意义 21世纪是全球人口老龄化的时代。联合国经济和社会事务部人口司发布的统计数据显示&#xff0c;截止到2018年7月,全球60岁及以上人口约为9.62亿&#xff0c;占总人口的比重约为12.8%。2018年底&#xff0c;我国60岁及以…

需求11——解决字段无法清空的两个小bug

目录 背景 第一个小bug——问题阐述 第一个小bug——解决方案 第二个小bug——问题阐述 第二个小bug——解决方案 总结 背景 已经写了一个上午的文章了&#xff0c;写完这篇就可以去吃饭了。这也是这几个月的我写的最后一个小bug文章&#xff0c;把这篇文章写完就搞定了…

vue 数组变化侦测

变更方法 Vue 能够侦听响应式数组的变更方法&#xff0c;并在它们被调用时触发相关的更新。这些变更方法包括: push() pop() shift() unshift() splice() sort() reverse() <template><div><p>点击按钮为列表添加元素</p><button click"cli…

【浏览器】如何正确使用Microsoft Edge

1、清理主页广告 如今的Microsoft Edge 浏览器 主页太乱了&#xff0c;各种广告推送&#xff0c;点右上角⚙️设置&#xff0c;把快速链接、网站导航、信息提要、背景等全部关闭。这样你就能得到一个超级清爽的主页。 网站导航       关闭 …

Mybatis高级查询-一对一查询

表介绍和表关系说明 新建以下4张表 tb_user&#xff1a;用户表 tb_order&#xff1a;订单表 tb_item&#xff1a;商品表 tb_orderdetail&#xff1a;订单详情表 【表关系】 1.tb_user和 tb_order表关系tb_user 《》 tb_order&#xff1a;一对多&#xff0c; 一个人可以下多…

第 4 章 Spring IoC容器之BeanFactory

Spring 的 IoC 容器是一个提供 IoC 支持的轻量级容器&#xff0c;除了基本的 IoC 支持&#xff0c;它作为轻量级容器还提供了 IoC 之外的支持。 Spring 提供了两种容器类型&#xff1a;BeanFactory 和 ApplicationContext&#xff1a; BeanFactory&#xff0c;基础类型 IoC 容…

布隆过滤器(Bloom Filter)详解

一、引言 在处理大量数据的场景中&#xff0c;我们经常会遇到判断一个元素是否在某个集合中的问题。传统的方法可能是使用 HashMap 等集合将数据保存起来&#xff0c;然后进行比较确定&#xff0c;但在元素很多的情况下&#xff0c;这种方式会非常浪费空间&#xff0c;检索速度…

dayu_widgets-简介

前言: 越来越多的人开始使用python来做GUI程序&#xff0c;市面上却很少有好的UI控件。即使有也是走的商业收费协议&#xff0c;不敢使用&#xff0c;一个不小心就收到法律传票。 一、原始开源项目: 偶然在GitHub上发现了这个博主的开源项目。https://github.com/phenom-films…

Fiddler配合wireshark解密ssl

环境&#xff1a; win11&#xff08;wireshark&#xff09;--虚拟机win7&#xff08;Fiddler&#xff09;---虚拟机win7&#xff08;HTTPS站点&#xff09; 软件安装问题&#xff1a; 需要.net环境&#xff0c;NDP461-KB3102436-x86-x64-AllOS-ENU.exe。 安装fiddler后安装下…

Pytest测试用例生命周期管理-Fixture

1、Fixture 用法 Fixture 特点及优势 1&#xff64;命令灵活&#xff1a;对于 setup,teardown,可以不起这两个名字2&#xff64;数据共享&#xff1a;在 conftest.py 配置⾥写⽅法可以实现数据共享&#xff0c;不需要 import 导⼊。可以跨⽂件共享3&#xff64;scope 的层次及…

从FastBEV来学习如何做PTQ以及量化

0. 简介 对于深度学习而言&#xff0c;通过模型加速来嵌入进C是非常有意义的&#xff0c;因为本身训练出来的pt文件其实效率比较低下&#xff0c;在讲完BEVDET后&#xff0c;这里我们将以CUDA-FastBEV作为例子&#xff0c;来向读者展示如何去跑CUDA版本的Fast-BEV&#xff0c;…

动态规划算法-路径问题——LCR.166.珠宝的最高价值

1.题目解析 题目来源&#xff1a;LCR.166珠宝的最高价值 原名&#xff1a;剑指offer47.礼物的最大价值 测试用例 2.算法原理 1.状态表示 创建dp表&#xff0c;dp[i][j]表示从最左上角到该目标位置的最大礼物值&#xff0c;代表dp[i][j]的状态 2.状态转移方程 目标位置的最大礼物…

SOMEIP_ETS_178: Subscribe_using_wrong_SOMEIP_MessageID

测试目的&#xff1a; 验证DUT能够拒绝一个SOME/IP头部使用错误消息ID进行服务发现的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个使用错误消息ID的服务发现SubscribeEve…

【livox】雷达初始化成功,但没有点云(已解决)

设备&#xff1a; 一台orin&#xff08;arm&#xff09; 接网线&#xff0c;本地ip&#xff1a;192.168.1.6 livox雷达&#xff1a;HAP 雷达初始ip&#xff1a;192.168.1.100 实物如下图&#xff1a; 然后 安装 livox_SDK 和 驱动 livox_ros_driver2 参考 【Livox】安…