第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字段

浙公网安备 33010602011771号