k8s(一)

文章目录

  • 前言
  • 一、云原生的概念
    • [1.1 云原生的发展介绍](#1.1 云原生的发展介绍)
    • [1.2 云原生的定义](#1.2 云原生的定义)
    • [1.3 云原生的技术栈](#1.3 云原生的技术栈)
  • 二、k8s概念
    • [2.1 K8S定义](#2.1 K8S定义)
    • [2.2 k8s特点](#2.2 k8s特点)
    • [2.3 k8s集群结构](#2.3 k8s集群结构)
      • [2.3.1 pod节点修复流程](#2.3.1 pod节点修复流程)
      • [2.3.2 node节点损坏](#2.3.2 node节点损坏)
  • 三、k8s部署
    • [3.1 环境配置](#3.1 环境配置)
    • [3.2 安装docker](#3.2 安装docker)
    • [3.3 k8s安装](#3.3 k8s安装)
    • [3.4 配置k8s网络插件](#3.4 配置k8s网络插件)
    • [3.5 测试(以nginx为例)](#3.5 测试(以nginx为例))
  • 总结

前言

本文主要讲述了k8s的基本概念和部署操作。

一、云原生的概念

1.1 云原生的发展介绍

云原生技术的主要发展历程如下:

2004年:Google开始在内部大规模使用容器技术。

2008年:Google将Cgroups技术合并进Linux内核,为容器化技术奠定基础。

2013年:Docker项目正式发布,推动容器技术进入开源领域。

2014年:Kubernetes项目正式发布,成为容器编排的行业标准。

2015年:Google、Redhat、微软等共同发起成立CNCF(云原生计算基金会),推进云原生技术的开源生态。

2017年:CNCF成员达到170个,基金项目数量为14个。

2018年:CNCF迎来三周年,成员数达195个,基金项目19个。

1.2 云原生的定义

云原生技术帮助企业在公有云、私有云和混合云等动态环境中构建和运行可弹性扩展的应用。

1、公有云:公有云是一种云计算服务,其基础设施由云服务提供商在互联网上公开提供。与私有云不同,公有云上的资源是共享的,用户可以按需使用和付费,无需拥有或管理基础设施。公有云服务通常提供存储、计算、网络和应用程序服务等资源。常见的公有云服务提供商包括亚马逊云、微软Azure、谷歌云等。

2、私有云:私有云是指一种云计算模式,是企业或组织在自己的数据中心中搭建的基于云计算技术的自有云平台。与公有云不同,私有云完全由企业自己拥有和控制,可以提供更高的安全性和灵活性,因为企业可以根据自身需求对云计算环境进行定制和管理,同时也不需要担心基础设施和数据被外部访问。因此,私有云通常被用于托管企业核心应用程序和敏感数据,以满足严格的规定和监管要求

3、混合云:混合云(Hybrid Cloud)是指由多个云计算架构、不同的云服务提供商或多种云计算部署模式组成的一个集成的云计算环境。混合云将公有云、私有云、本地IT基础设施和第三方云服务有机地结合起来,以满足企业不同的应用场景和需求。

混合云由多个云环境组成,使得企业可以根据应用的不同需要选择最合适的云环境,使其最大化利用公有云提供的高度灵活性和弹性,同时也可以保留私有云提供的安全性、控制性和可靠性。

混合云的部署方式比较复杂,但能够提供更加灵活的云计算解决方案。在混合云中,企业可以将敏感数据存储在私有云中,同时运行不太敏感的应用程序和工作负载则可以在公有云中进行部署,这能够使得企业在降低成本的同时保持数据和隐私的安全性。

1.3 云原生的技术栈

云原生技术栈包括以下关键技术:

容器化:如Docker、containerd,提供应用的轻量级封装和环境一致性。

服务网格:例如Istio,管理服务之间的通信、安全性和流量控制。

微服务架构:将应用拆解为多个独立的服务,支持灵活扩展和独立部署。

不可变基础设施:服务一旦部署,便不再修改,通常使用版本化的镜像来保持一致性。

声明式API:通过定义期望的状态,由系统自动管理资源。

云原生 = 容器化(docker+k8s) + 微服务(Microservices)+ 无服务(Serverless) + DevOps +Service Mesh(服务网格) + 云(Cloud)

二、k8s概念

2.1 K8S定义

K8S 是 Kubernetes 的简写(K + "ubernetes" 中的 8 个字母 + S)。

Kubernetes 是一个开源平台,用于自动部署、扩展和管理容器的一个(containerized)应用程序。

它可以看作一个负责自动化运维、编排多个容器(如由 containerd 驱动的容器)的集群管理系统。

源起:Kubernetes 受 Google 的 Borg 系统启发,后使用 Go 语言重写并捐赠给 CNCF

名称含义:源自希腊语,意为 "舵手 / 导航者"

官网:

-- 英文:https://kubernetes.io

-- 中文:https://kubernetes.io/zh-cn/docs

版本节奏:每年约四个发布版本(例如 1.12、1.15、1.17 ... 到 1.30、1.34等)

2014年 Docker & Kubernetes蜜月期

2015~2016年 Kubernetes & RKT vs Docker,最终Docker胜出

2016年 Kubernetes逐渐赢得任务编排的胜利

2017年rkt和containerd 捐献给CNCF

2020年kubernetes宣布废弃dockershim,但 Mirantis和 Docker宣布维护dockershim

2022年5月3日,Kubernetes v1.24正式发布,此版本提供了很多重要功能。该版本涉及46项增强

功能:其中14项已升级为稳定版,15项进入beta阶段,13项则刚刚进入alpha阶段。此外,另有2项功能被弃用、2项功能被删除。

关键变动:从 Kubernetes 1.24 起,官方移除对 Docker 的内建支持(即移除 dockershim),节点必须使用符合 CRI(Container Runtime Interface)的运行时(如 containerd、CRI-O 等)

2.2 k8s特点

Kubernetes 的设计初衷是解决传统部署方式在扩展、管理、容错等方面的困难。

以下是它主要解决的问题和带来的好处:

1、自动化运维:无须人工干预,实现一条命令或声明式方式完成部署、更新、扩容、缩容、删除等

2、弹性伸缩:依据指标(CPU、内存、自定义指标等)自动扩展或缩减 Pod 副本数

3、容灾 / 自愈:当某个节点或容器失败时,K8S 会自动重建或迁移 Pod,保证副本数量和期望状态

4、服务发现与负载均衡:通过 Service 为 Pod 提供稳定的访问入口,并自动分发请求

5、滚动升级与回滚:支持渐进式升级,一旦出错可以回滚到之前版本

6、集中配置与密钥管理:通过 ConfigMap 、 Secret 等资源集中管理配置与敏感数据

7、存储编排:支持将外部存储(NFS、Ceph、云存储等)纳入集群资源管理

批处理 / 定时任务:支持 Job 、 CronJob 用于一次性或定时任务

2.3 k8s集群结构

k8s由:kubectl、api server、schduler、controller manager、proxy、kubelet、etcd七个大部分组成

kubectl:客户端,用于向k8s发送指令、请求等

schedule:负责根据各个node节点的性能、内存、核等硬件,对没有分配node的pod进行预选、优选,将要存放在哪个node节点,只负责选定位置,不负责实际操作。

control manager:负责控制和管理,会持续监控各个资源,并对比期望,一旦发现不对(比如pod坏了导致,比预期要少),就会立马新建一个目标资源,使资源平衡。

etcd:负责存放k8s集群中所有的资源

api server:是所有组件的上级,是k8s集群中的组件核心,各个组件,比如control manager在新建pod,要调用etcd中的数据时,必须先经过api server同意。

kubelet:负责监控node节点与pod的状态,为粗略监控,一般就是监控生命状态,一旦发现node节点中的pod死亡会立马通知api server,角色类似于apiserver派遣到实地的监控者。

proxy:用于Service 的网络规则与负载转发,实现k8s能够接收外部访问

node:代表一个节点,也就是主机。

pod:是用于存放服务节点的最小单位,一个pod中可以放置多个容器或服务

2.3.1 pod节点修复流程

举例:若pod损坏后,kubelet会监控到pod死亡,并将此消息通知给api server,api server会将pod死亡的信息写入etcd中,之后control manager收到pod死亡的信息后会创建一个新的pod,再创建之前,schedule会经过预选、优选的方式选定好该pod所在的node节点,control manager通过apiserver从etcd中拿取死亡pod的数据,再根据数据创建一个新的pod,并放置在对应的node中。

2.3.2 node节点损坏

原理:node节点损坏后,apiserver会接受到kubelet的死亡信息,从而得知node节点死亡,为了工作的持续进行,会通过查看etcd中死亡node的pod信息,将node节点中对应的pod节点新建并放置在健康的node节点中。

三、k8s部署

3.1 环境配置

10.0.0.100 master节点

10.0.0.2 node1节点

10.0.0.3 node2节点

关闭防火墙和网络增强服务

vim /etc/hosts ------------------------------------------编辑ip映射

swapoff -a ------------------------------------------------关闭交换分区

sed -ri 's/.swap. /#&/' /etc/fstab ---------------------------------------永久关闭交换分区

for i in ( l s / u s r / l i b / m o d u l e s / (ls /usr/lib/modules/ (ls/usr/lib/modules/(uname -r)/kernel/net/netfilter/ipvs|grep -o "[.]*");do echo i; /sbin/modinfo -F filename i >/dev/null 2>&1 && /sbin/modprobe $i;done ------------------加载 ip_vs 模块

cat > /etc/sysctl.d/kubernetes.conf << EOF

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

#关闭ipv6协议

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

EOF

(调整内核参数,开启网桥模式,可将网桥的流量传递给iptables链)

sysctl --system ------------------------------------使参数生效

3.2 安装docker

第一步 安装docker的依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 ------------------安装docker相关的依赖包

第二步 配置镜像源(这里选择用阿里镜像源)

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ------------------------配置阿里镜像源

第三步 安装docker服务(这里选择20.10.18版本)

yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io ------------------------------------

第四步 安装镜像加速器(这里选择用华为加速器)

systemctl daemon-reload ------------------------------------重新加载

systemctl restart docker.service ------------------------------------重启docker服务

systemctl enable docker.service ------------------------------------开机自启

3.3 k8s安装

第一步 定义k8s源

第二步 安装k8s服务

yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

第三步 导入k8s所需镜像

第四步 初始化kubeadm

kubeadm config print init-defaults > /opt/kubeadm-config.yaml ------------------导出一个config文件

第五步 创建身份认证

(初始化成功,身份认证已创建)

第六步 给其他节点配置身份认证

在kubeadm-init.log文件中查看最后两行(身份认证信息),之后在其他要加入集群的节点输入。

第七步 设定kubectl

kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl通过默认的"$HOME/.kube/config" 的路径进行加载。

第八步 修复k8s集群的组件

kubectl get cs ------------------------------查看k8s核心组件的情况

(这里会显示控制器与调度器不健康)

接下来我们要修改它们的配置文件

systemctl restart kubelet ------------------------重启k8s服务

再次查看组件状态后,所有组件都会显示健康

3.4 配置k8s网络插件

第一步 在所有节点上导入网络插件镜像

第二步 在 master 节点创建 flannel 资源

(这里全部显示ready就代表安装成功)

3.5 测试(以nginx为例)

第一步 在k8s集群中创建容器

kubectl create deployment nginx --image=nginx

第二步 暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort

第三步 访问宿主机ip:30088

总结

本文主要讲述了k8s的基本概念和部署操作。

相关推荐
闲人不梦卿1 天前
网络安全技术
网络·网络安全
可爱又迷人的反派角色“yang”1 天前
CICD持续集成Ruo-Yi项目
linux·运维·网络·ci/cd·docker·容器
大聪明-PLUS1 天前
一个简单高效的 C++ 监控程序,带有一个通用的 Makefile
linux·嵌入式·arm·smarc
烤鱼骑不快1 天前
ubuntu系统安装以及设置
linux·数据库·ubuntu
星环处相逢1 天前
K8s 网络插件选型:Flannel vs Calico 深度对比
网络·容器·kubernetes
HIT_Weston1 天前
89、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(三)
linux·运维·ubuntu
2501_941822751 天前
在开罗智能公共交通场景中构建实时调度与高并发乘客数据处理平台的工程设计实践经验分享
网络·安全
Zsr10231 天前
K8s网络方案深度解析:Flannel vs Calico 怎么选?
网络·容器·kubernetes·flannel·calico
白驹过隙^^1 天前
windows通过docker compose部署oktopus服务
linux·windows·tcp/ip·docker·容器·开源