第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字段
复制代码

 

 
posted @   逆风飞翔的博客  阅读(16)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示