K8s(Kubernetes)搭建从0到1

 1主流的容器集群管理系统

2Kubernetes是什么

• Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s。

• Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效

官方网站:http://www.kubernetes.io

官方文档:https://kubernetes.io/zh/docs/home/

3Kubernetes集群架构与组件

Master组件

kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESTfulAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如Deployment、Service

kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

etcd

分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。

Node组件

kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

第三方容器引擎

容器引擎,运行容器, 例如docker、containerd、podman

4生产环境部署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

5服务器硬件配置推荐

6使用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)

Kubernetes移出默认Docker!

在Kubernetes平台中,为了解决与容器运行时(例如Docker)集成问题,在早期社区推出了CRI(Container Runtime Interface,容器运行时接口),以支持更多的容器运行时。

当我们使用Docker作为容器运行时之后,架构是这样的,如图所示:

Kubernetes 计划弃用就是kubelet中dockershim。即 Kubernetes

kubelet 实现中的组件之一,它能够与 Docker Engine 进行通信。

为什么这么做?

• K8s核心代码优化

• Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查

• Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患

如何应对?

可通过cri-dockerd继续使用Docker,并了解其他主流容器运行时。

除了docker之外,CRI还支持很多容器运行时,例如:

• containerd:containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟

• cri-o,podman:都是红帽(RedHat)项目,目前红帽主推podman

7Containerd容器运行时

Containerd容器运行时部署步骤如下:

1、准备配置

cat > /etc/sysctl.d/99-kubernetes-cri.conf << EOF

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

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

net.ipv4.ip_forward = 1

EOF

sysctl -system

2、安装Containerd

cd /etc/yum.repos.d

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y containerd.io

PS:课堂上使用Docker,建议做完Containerd实验后,还恢复到Docker。

3、修改配置文件

• 设置pause镜像地址为阿里云镜像仓库地址

• 配置镜像下载加速器

4、配置kubelet使用containerd

containerd config default > /etc/containerd/config.toml

vi /etc/containerd/config.toml

...

[plugins."io.containerd.grpc.v1.cri"]

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"

... 

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]

endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]

systemctl restart containerd

vi /var/lib/kubelet/kubeadm-flags.env

KUBELET_KUBEADM_ARGS= "--container-runtime- 

endpoint=unix:///run/containerd/containerd.sock --pod-infra- 

container-

image=registry.aliyuncs.com/google_containers/pause:3.9"

systemctl restart kubelet

5、验证

kubectl get node -o wide      

containerd提供了ctr命令行工具管理容器,但功能比较简单,所以一般会用crictl工具检查和调试容器。

准备crictl连接containerd配置文件:

cat > /etc/crictl.yaml << EOF

runtime-endpoint: unix:///run/containerd/containerd.sock

EOF

Docker vs Containerd管理命令

kubeconfig配置文件

kubectl使用kubeconfig认证文件连接K8s集群,使用kubectl config指令生成kubeconfig文件。

8kubectl管理命令概要

官方文档参考地址:https://kubernetes.io/zh/docs/reference/kubectl/overview/

9牛刀小试,快速部署一个网站

使用Deployment控制器部署镜像:

kubectl create deployment web-demo --image=lizhenliang/web-demo:v1

kubectl get deployment,pods

使用Service将Pod暴露出去:

kubectl expose deployment java-web-demo --port=80 --type=NodePort --target-port=80

kubectl get service

访问应用:

http://NodeIP:Port # 端口随机生成,通过kubectl get service获取

10基本资源概念

Pod:K8s最小部署单元,一组容器的集合

Deployment:最常见的控制器,用于更高级别部署和管理Pod

Service:为一组Pod提供负载均衡,对外提供统一访问入口

Label :标签,附加到某个资源上,用于关联对象、查询和筛选

Namespaces :命名空间,将对象逻辑上隔离,也利于权限控制

命名空间(Namespace):Kubernetes将资源对象逻辑上隔离,从而形成多

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值