Kubernetes的快速安装

news2024/9/22 7:28:58

 一、kubernetes的基本概念

 1.kubernetes

   Kubernetes 是一个开源的开源的分布式编排技术,Kubernetes 致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台,其遵循主从式架构设计、组件可以分为工作节点 (Node) 组件,和控制平面组件。 

主要用途:
自动化部署,扩展,管理容器;
资源调度;
部署管理;
服务发现;
扩容缩容;
监控。(检测硬件系统及服务进程)

2.  kubernetes优势

(1)docker缺点

宿主机宕机造成宿主机容器不可用,无法自动修复。

容器正在运行,接口连接不上

应用程序部署,回滚,扩缩容困难。

容器较多时涉及的端口难以维护。

(2)k8s的优势

管理大量跨主机容器

快速部署和扩容应用

无缝对接应用功能

节省资源,优化硬件

3.kubernetes架构解析

       由图可知,Kubernetes 架构可以简单分为主 (master) 节点,从 (worker/node) 节点和数据库 ETCD。其中主节点为集群的控制单元,一般不会运行业务应用程序,主要包含的组件Kube-APIServer、Kube-ControllerManager、Kube-Scheduler。从节点为工作节点,也就是部署应用程序容器的节点,主要包含的组件有 Kubelet、Kube-Proxy、容器,当然如果 master 节点也要部署容器,也会包含这两个组件。

Master节点组件是k8s中集群控制节点

  • API server 是控制枢纽,用于模块之间数据交换,将信息存储到ETCD
  • Scheeduler  主要用于资源调度
  • Controller Manager  主要负责集群的状态
  • ETCD  负责存储集群的数据,是持久的,轻量级的分布式非关系型数据库,ETCD应至少为3个节点(奇数台避免选举平票和脑裂发生)

Node节点组件也称为worker节点,主要负责部署容器主机

  • kubelet  是node上的核心组件,负责维护pod的生命周期。是pod和API主要实现者,负责驱动容器的执行层
  • kube-proxy主要负责网络代理和负载均衡

4.kubenetes网络插件

      CNI(容器网络接口) 是一个云原生计算基金会项目,它包含了一些规范和库,用于编写在Linux 容器中配置网络接口的一系列插件。CNI 只关注容器的网络连接,并在容器被删除时移除所分配的资源。
      Kubernetes 使用 CNI 作为网络提供商和 Kubernetes Pod 网络之间的接口。

(1)Flannel 网络 

       由Coreosk 开发的一个项目,很多部署工具或者 k8s 的发行版都是默认安装,flannel 是可以用集群现有的 etcd,利用 api 方式存储自身状态信息,不需要专门的数据存储,是配置第三层的ipv4 0verlay 网络,在此网络内,每个节点一个子网,用于分配 ip 地址,配置 pod 时候,节点上的网桥接口会为每个新容器分配一个地址,同一主机中的 pod 可以使用网桥通信,不同主机的 pod流量封装到udp数据包中,路由到目的地。

        Flannel 通过每个节点上启动一个 flnnel 的进程,负责给每一个节点上的子网划分、将子网网段等信息保存至 etcd,具体的报文转发是后端实现,在启动时可以通过配置文件指定不同的后端进行通信,目前有UDP、VXLAN、host-gatway 三种,VXLAN 是官方推荐,因为性能良好,不需人工干预。UDP、VXLAN 是基于三层网络即可实现,host-gatway 模式需要集群所有机器都在同一个广播域、就是需要在二层网络在同一个交换机下才能实现,host-gateway 用于对网络性能要求较高的常见,需要基础网络架构支持,UDP 用于测试或者不支持 VXLAN 的 nux 内核。反正一般小规模集群是完全够用的,直到很多功能无法提供时在考虑其他插件。

(2)Calico 网络

       虽然 falnnel 很好,但是 calico 因为其性能、灵活性都好而备受欢迎,calico 的功能更加全面,不但具有提供主机和 pod 间网络通信的功能,还有网络安全和管理的功能,而且在 CNI 框架之内封装了 calico 的功能,calico 还能与服务网络技术 Istio 集成,不但能够更加清楚的看到网络架构也能进行灵活的网络策略的配置,calico 不使用 overlay 网络,配置在第三层网络,使用 BGP路由协议在主机之间路由数据包,意味着不需要包装额外的封装层。主要点在网络策略配置这一点可以提高安全性和网络环境的控制。
如果集群规模较大,选择 calico 没错,当然 calico 提供长期支持,对于一次配置长期使用的目的来说,是较好的选择。

二、实验部署

1.配置基础环境   

三个节点依次部署

[root@localhost ~]# hostnamectl set-hostname k8s-master        (101)
[root@localhost ~]# bash

[root@localhost ~]# hostnamectl set-hostname  k8s-node01      (102)

[root@localhost ~]# hostnamectl set-hostname   k8s-node02     (103)
[root@k8s-master ~]# vim /etc/hosts
192.168.10.101 k8s-master

192.168.10.102 k8s-node01

192.168.10.103 k8s-node02

[root@k8s-master ~]# swapoff -a            (关闭交换分区)
[root@k8s-master ~]# vim /etc/fstab             (永久关闭)

#/dev/mapper/centos-swap swap                    swap    defaults        0 0
 

配置kubenetes仓库

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

[root@k8s-master ~]#  yun  clean  all

[root@k8s-master ~]# yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

[root@k8s-master ~]# systemctl enable kubelet           (开机自启)

备注:

k8s安装完成之后,通过systemctl start kubelet  无法启动,需要进行初始化完成之后才可以启动成功。

2.初始化配置文件

操作节点 k8s-master

[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml      (生成初始化配置文件)

备注:
kubeadm config view: 查看当前集群中的配置值
kubeadm config print join-defaults: 输出 kubeadm join 默认参数文件的内容
kubeadm config images list: 列出所需的镜像列表
kubeadm config images pull: 拉取镜像到本地。
kubeadm config upload from-flags: 由配置参数生成 ConfigMap。

[root@k8s-master ~]# vim init-config.yaml

localAPIEndpoint:
  advertiseAddress: 192.168.10.101    #12
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master             #17
  taints: null
.......

imageRepository: registry.aliyuncs.com/google_containers    #30

podSubnet: 10.244.0.0/16    

备注:

serviceSubnet: 指定使用 ipvs 网络进行通信,ipvs 称之为 IP 虚拟服务器(IP Virtual Server.简写为 IPVS)。是运行在 LVS 下的提供负载平衡功能的一种技术。含义 IPVS 基本上是一种高效的Layer-4 交换机
podSubnet 10.244,0.0/16 参数需要和后文中 kube-flannel.ymI 中的保持一致,否则,可能会使得 Node 间 Cluster IP 不通。
默认情况下,每个节点会从 PodSubnet 中注册一个掩码长度为 24 的子网,然后该节点的所有 podip 地址都会从该子网中分配。

#拉取所需要的镜像(三个节点都要拉取)

初始化(操作节点在k8s-master)
[root@k8s-master ~]# kubeadm init --config=init-config.yaml     (初始化)
 

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

You 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.10.101:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:ad34e21de7053cbfc56dd8c61d81f80e27d9a9b7f99fb117a43a7b78547afd14 

 

备注:

在master生成令牌,在node上直接复制,持此令牌node节点可以加入进来。

配置文件到home目录

导出为全局变量

[root@k8s-master ~]# kubectl get nodes       (在k8s-master上检查节点)
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-6d8c4cb4d-tv5ql              0/1     Pending   0          14m
kube-system   coredns-6d8c4cb4d-wxdd2           0/1     Pending   0          14m

kube-system   etcd-k8s-master                            1/1     Running   0          14m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          14m
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          14m
kube-system   kube-proxy-ksfxx                            1/1     Running   0          14m
kube-system   kube-proxy-pk5r4                           1/1     Running   0          13m
kube-system   kube-proxy-t69ks                            1/1     Running   0          12m
kube-system   kube-scheduler-k8s-master            1/1     Running   0          14m
 

部署calico网络插件 可以提前下载直接部署。

[root@k8s-master ~]# kubectl apply -f calico.yaml 

[root@k8s-master ~]#  docker  images      (查看镜像)

[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-64cc74d646-b7n2b   1/1     Running   0          4m25s
kube-system   calico-node-22mbr                          1/1     Running   0          4m25s
kube-system   calico-node-nxnm8                          1/1     Running   0          4m25s

kube-system   calico-node-pvv49                          1/1     Running   0          4m25s
kube-system   coredns-6d8c4cb4d-tv5ql                 1/1     Running   0          24m
kube-system   coredns-6d8c4cb4d-wxdd2             1/1     Running   0          24m
kube-system   etcd-k8s-master                               1/1     Running   0          24m
kube-system   kube-apiserver-k8s-master              1/1     Running   0          24m
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          24m
kube-system   kube-proxy-ksfxx                           1/1     Running   0          24m
kube-system   kube-proxy-pk5r4                           1/1     Running   0          23m
kube-system   kube-proxy-t69ks                           1/1     Running   0          23m
kube-system   kube-scheduler-k8s-master             1/1     Running   0          24m
 

下载Metrics-server的yaml文件

https://github.com/kubernetes-sigs /metlcs-server/releases/download/v9.6.3/com
ponents . yaml

[root@k8s-master ~]# vim components.yaml 

     k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --kubelet-insecure-tls       #135添加
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3   #141
        imagePullPolicy: IfNotPresent
 

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   28m   v1.23.0
k8s-node01   Ready    <none>                 27m   v1.23.0
k8s-node02   Ready    <none>                 26m   v1.23.0

[root@k8s-master ~]# kubectl create -f components.yaml 
[root@k8s-master ~]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master   292m              14%          1698Mi              44%       
k8s-node01   108m             5%             1569Mi              41%       
k8s-node02   309m             15%           1061Mi             27%   

部署Dashboard 

[root@k8s-master ~]# mkdir -p /opt/k8s/dashboard
[root@k8s-master ~]# cd /opt/k8s/dashboard/
上传所需要的yaml文件

[root@k8s-master dashboard]# ls
dashboard-user.yaml     dashboard.yaml

[root@k8s-master dashboard]# kubectl create -f .
 

 [root@k8s-master ~]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard       (修改端口号)
- nodePort: 31245

[root@k8s-master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')           (生成token) 

[root@k8s-master ~]# vim token      (将生成的token写入,方便登录)

安装helm客户端

[root@k8s-master ~]# tar zxvf helm-v3.9.4-linux-amd64.tar.gz 
[root@k8s-master ~]# ls
anaconda-ks.cfg  components.yaml                 images            install_docker_ali-yum.sh  token
calico.yaml      helm-v3.9.4-linux-amd64.tar.gz  init.config.yaml  linux-amd64
[root@k8s-master ~]# cd linux-amd64/
[root@k8s-master linux-amd64]# ls
helm  LICENSE  README.md
[root@k8s-master linux-amd64]# mv helm /usr/local/bin/

[root@k8s-master linux-amd64]# helm version
version.BuildInfo{Version:"v3.9.4", GitCommit:"dbc6d8e20fe1d58d50e6ed30f09a04a77e4c68db", GitTreeState:"clean", GoVersion:"go1.17.13"}
 

命令优化

[root@k8s-master ~]# vim .bashrc 

alias ku='kubectl'

[root@k8s-master ~]# source .bashrc 
[root@k8s-master ~]# ku get pod -A           (可以直接使用ku)
 

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

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

相关文章

基础第3关:LangGPT结构化提示词编写实践

提示词&#xff1a; # Role: 伟大的数学家 ## Profile - author: LangGPT - version: 1.0 - language: 中文 - description: 一个伟大的数学家&#xff0c;能够解决任何的数学难题 ## Goals: 根据关键词进行描述&#xff0c;避免与已有描述重复。 ## Background: 你正在被…

2024网安创新大赛,美创科技产品方案双获奖!

2024年网络安全优秀创新成果大赛 “2024年网络安全优秀创新成果大赛”是国家网络安全宣传周重要活动之一。大赛由中央网信办指导、中国网络安全产业联盟&#xff08;CCIA&#xff09;主办。 近日&#xff0c;“2024年网络安全优秀创新成果大赛-杭州分站赛” 正式公布评选结果。…

强!小目标检测全新突破!检测速度快10倍,GPU使用减少73.4%

强&#xff01;小目标检测全新突破&#xff0c;提出Mamba-in-Mamba结构&#xff0c;通过内外两层Mamba模块&#xff0c;同时提取全局和局部特征&#xff0c;实现了检测速度快10倍&#xff0c;GPU使用减少73.4&#xff05;的显著效果&#xff01; 【小目标检测】是近年来在深度…

点灯案例练习(基于寄存器)

目录 一、需求描述 二、工程创建 二、硬件电路设计 三、软件设计 1、main.c 1、开启时钟 2、配置GPIOA的工作模式 3、设置PA1、PA8端口低电平 4、给死循环保持状态 2、最终代码如下 四、实验现象 前面&#xff0c;我们耗费大量时间&#xff0c;终于点亮了STM32板子上的…

WLAN基础知识(1)

WLAN&#xff1a; 无线局域网&#xff0c;无线技术&#xff1a;Wi-Fi、红外、蓝牙等 WLAN设备&#xff1a; 胖AP&#xff1a; 适用于家庭等小型网络&#xff0c;可独立配置&#xff0c;如&#xff1a;家用Wi-Fi路由器 瘦AP&#xff1a; 适用于大中型企业&#xff0c;需要配合AC…

【Kettle】新建转换工程

目录 一、新建一个转换工程1. 创建【转换】工程2. 创建输入对象并编辑步骤3. 创建输出对象并编辑步骤 二、运行转换工程和查看执行结果1. 运行转换工程2. 查看执行结果 一、新建一个转换工程 1. 创建【转换】工程 在 Kettle 欢迎界面中&#xff0c;依次点击【新建】->【转…

其实你就学不会 Python

标题党一下&#xff0c;Python 程序员成千上万&#xff0c;当然有很多人学得会。这里说的“你”&#xff0c;是指职场中的非专业人员。 职场人员一般会用 Excel 处理数据&#xff0c;但也会有很多无助的情况&#xff0c;比如复杂计算、重复计算、自动处理等&#xff0c;再遇上个…

中石油笔试25届秋招考什么?如何通过在线测评|附真题库面试攻略

职小豚 一、中石油公司介绍 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊大名鼎鼎的中石油。 中石油&#xff0c;那可是能源领域的巨无霸&#xff01;它就像一座庞大的能源宝库&#xff0c;为我们的生活和国家的发展源源不断地输送着动力。 中石油在国内外的油气勘探…

如何优雅的薅羊毛之Flux.1免费使用还支持中文prompt

我看硅基流动&#xff0c;现在免费用Flux.1的模型了&#xff0c;就注册了一个账号 但是Flux和之前的sd一样&#xff0c;中文理解力有问题 换哪个模型都不成&#xff0c;直接换英文提示词还行 放DIFY里串一下 我看tool里没有&#xff0c;那就自定义一个 DIFY要求schema要满足op…

SpringCloud天机学堂:分布式任务调度

SpringCloud天机学堂&#xff1a;分布式任务调度 文章目录 SpringCloud天机学堂&#xff1a;分布式任务调度1、分布式任务调度2、分布式任务调度原理3、分布式任务调度技术对比4、XXL-JOB介绍部署调度中心定义任务注册执行器配置任务调度执行一次 1、分布式任务调度 一般的定时…

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

( Neurocomputing,2023)Relphormer:用于知识图谱表示的关系图Transformer

Relphormer:Relational Graph Transformer for Knowledge Graph Representations 资料 论文&#xff1a;Relphormer:Relational Graph Transformer for Knowledge Graph Representations 代码&#xff1a;https://github.com/zjunlp/Relphormer 摘要 Transformer在包括自然…

提高网站并发量的有效策略有哪些?

提高网站并发量的有效策略有哪些&#xff1f; 1. 静态化 & 模板引擎2. 分离静态资源3. 数据库优化4. 缓存技术5. 镜像部署6. 负载均衡7. CDN加速 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 静态化 & 模板引擎 HTML静态化&a…

8月19日笔记

http隧道搭建(续) ABPTTS安装使用 一款基于 SSL 加密的 HTTP 端口转发工具&#xff0c;全程通信数据加密&#xff0c;比 reGerog 都要稳定。使用 python2 编写&#xff0c;但是该工具只支持 aspx 和 jsp 脚本的网站。 下载地址&#xff1a;https://github.com/nccgroup/ABPTT…

CentOS7上安装RabbitMQ

在 CentOS 7 上安装 RabbitMQ 需要一些步骤&#xff0c;包括安装必要的依赖项、启用 RabbitMQ 源以及安装 RabbitMQ 服务器。以下是详细的步骤&#xff1a; 1. 更新系统 首先&#xff0c;确保系统是最新的&#xff1a; sudo yum update -y2. 安装 Erlang RabbitMQ 依赖于 E…

【Python】成功解决 ModuleNotFoundError: No module named ‘PIL‘

【Python】成功解决 ModuleNotFoundError: No module named ‘PIL’ 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高…

网络安全-防火墙初步认识。

文章目录 1. 防火墙是什么&#xff1f;2. 防火墙的工作原理是什么&#xff1f;3. 防火墙的分类有哪些&#xff1f;4. 实战4.1 防火墙管理和实验介绍4.2 防火墙命令行初体验实验目标&#xff1a;实验步骤&#xff1a; 4.3 防火墙Web初体验实验目标&#xff1a;实验步骤&#xff…

[星瞳科技]OpenMV是否属于单片机?

文件系统 MicroPyhon的文件系统是FatFS。 根目录 路径都是以根目录为起点。 当插入sd卡后&#xff0c;根目录就是SD卡&#xff1b;不插入sd卡&#xff0c;根目录就是内置的Flash。 如果需要&#xff0c;你可以在SD卡上&#xff0c;新建一个空文件&#xff1a;/flash/SKIPS…

你是如何克服编程学习中的挫折感的?

编程之旅&#xff1a;穿越挫折的迷雾&#xff0c;拥抱成长的阳光 在编程的浩瀚星空中&#xff0c;每个人都是探索未知的宇航员&#xff0c;面对着无尽的代码海洋和未知的Bug黑洞。挫折感&#xff0c;这位不速之客&#xff0c;时常在探索的旅途中悄然降临&#xff0c;试图用迷茫…

使用WINUI3 编写一个小软件1 C#

本篇主要是记录安装和运行的问题。 先说安装 因为我是WIN11&#xff0c;所以勾了&#xff0c;如果你是WIN10就不用勾选11那个&#xff0c;但是我不确定用11要不要10那个&#xff0c;所以就勾了&#xff0c;按安装手册来的。 2、创建项目 照着选就完事了&#xff0c;别选错 这…