第2章 快速部署一个kubernetes集群
快速部署一个kubernetes集群
• 生产环境部署K8s的2种方式
• 服务器硬件配置推荐
• 使用kubeadm快速部署一个K8s集群
• K8s网络模型
• Kubernetes将弃用Docker!
• kubeconfig配置文件
• kubectl命令行管理工具
• 快速部署一个网站
• 基本资源概念
1.1 生产环境部署k8s的2种方式
- kubeadm
kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署kubernetes集群。
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
- 二进制
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
下载地址:https://github.com/kubernetes/kubernetes/releases
• 第三方工具或者Web
1.2 服务器硬件配置推荐
1.3 使用kubeadm快速塔建k8s集群
1、安装Docker 2、创建一个 Master 节点 kubeadm init 3、将一个 Node 节点加入到当前集群中 kubeadm join <Master节点的IP和端口 > 4、部署容器网络(CNI) kubectl apply -f calico.yaml 5、部署Web UI(Dashboard)
1.4k8sCNI网络模型
容器内部共用网络命名空间
• K8s是一个扁平化网络
• 即所有部署的网络组件都必须满足如下要求:
• 一个pod一个ip
• 所有的pod可以与任何其他pod直接通信
• 所有节点可以与所有pod直接通信
• Pod内部获取到的ip地址与其他pod或节点与其通信时的ip地址是同一个。
主流网络组件有:Flannel、Calico等。
1.5k8s将弃用docker
在kubernetes平台中,为了解决与容器运行时(例如docker)集成问题,在早期社区推出了CRI(Container Runtime Interface容器运行时接口),以支持更多的容器运行时。当我们使用docker作为容器运行时之后,架构是这样的。如图所示:
Kubernetes 计划弃用就是kubelet中dockershim。即 Kubernetes
kubelet 实现中的组件之一,它能够与 Docker Engine 进行通信。

为什么这么做?
• Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查
• Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患
如何应对?
在未来的 Kubernetes 版本彻底放弃 Docker 支持之前,引入受支持的容器运行时。
除了docker之外,CRI还支持很多容器运行时,例如:
• containerd:containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟
• cri-o,podman:都是红帽(RedHat)项目,目前红帽主推podman
1.6kubeconfig配置文件
kubectl 使用kubeconfig认证文件连接k8s集群,使用kubectl config指令生成kubeconfig文件。
1.7Kubectl命令行管理工具
1.8Kubectl命令行管理工具
使用Deployment控制器部署镜像: kubectl create deployment web --image=lizhenliang/java-demo kubectl get deploy,pods 使用Service将Pod暴露出去: kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web kubectl get service 访问应用: http://NodeIP:Port # 端口随机生成,通过get svc获取
1.9K8s基本资源概念
Pod:k8s最小部署单元,一组容器的集合
Deployment:是最常见的控制器,用于更高级别部署和管理pod
Service:为一组pod提供负载均衡,对外提供统一访问入口
Label:标签,附加到某个资源上,用于关联对象,查询和筛选
Namespace:命名空间,将对象逻辑上隔离,也有利于权限控制
资源关系图
1.10基本资源概念:命名空间
命名空间(namespace):kubernetes将资源对象逻辑上隔离,从而形成多个虚拟集群。
应用场景: • 根据不同团队划分命名空间 • 根据项目划分命名空间 Kubectl get namespace • Default:默认命名空间 • Kube-system:k8s系统方面的命名空间 • Kube-public:公开的命名空间,谁都可以访问 • Kube-node-lease:k8s内部命名空间 两种方法指定资源命名空间: • 命令行加 -n • yaml资源元数据里指定namespace字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!