Kubernetes(K8s)从入门到精通

本文介绍了Kubernetes(K8s)的基础知识,包括Docker背景、K8s的主要功能、核心组件以及常见概念。内容涵盖K8s的自我修复、弹性伸缩、服务发现等特性,并详细阐述了K8s集群中ApiServer、Scheduler、Controller-Manager、kubelet和kube-proxy的角色。同时,还分享了在搭建K8s集群过程中遇到的网络插件flannel镜像下载问题及解决方案。
摘要由CSDN通过智能技术生成

一、Docker背景和K8s介绍

1.1 应用部署方式演变

部署方式 传统部署 虚拟化部署 容器化部署
概念 直接将应用部署在物理机上 在一台物理机上运行多个虚拟机,每个虚拟机是一个独立的环境 与虚拟机类似,但是共享了操作系统
优点 简单 应用环境不会相互影响,有一定的安全性 保证每个容器有自己的文件系统、CPU、内存等
缺点 很难合理分配资源,一个程序导致内容泄露会影响别的程序 增加了操作系统,浪费资源 /

三种应用部署方式如下图所示。容器化部署方式,相较于虚拟机部署,不需要新建操作系统,直接复用宿主机的操作系统。
在这里插入图片描述
当然,容器化部署也会存在一些问题,比如:

  1. 一个容器故障停机,如何让另一个容器立刻启动去替补;
  2. 当并发访问量变大,如何横向扩展容器数量?

这些问题统称为“容器编排”问题,为解决这些容器编排问题,有一些容器编排工具:

  1. Swarm:Docker自己的容器编排工具
  2. Mesos:Apache的一个资源统一管控工具,需要和Marathon结合使用
  3. K8s:谷歌开源的容器编排工具(OpenShift和Rancher是k8s的封装)

1.2 K8s介绍

K8s的本质是一组“服务器集群”,可以在集群的每个节点(服务器)上运行特定的程序,来对节点中的容器进行管理,主要有这些功能:

  1. 自我修复:某个容器崩溃,能够在一秒内迅速启动新的容器;
  2. 弹性伸缩:自动对集群中正在运行的容器数量进行调整;
  3. 服务发现:通过自动发现的形式找到它所依赖的服务;
  4. 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡(轮询
  5. 版本回退:如果新发布的程序版本有问题,可以立即回退到原来的版本
  6. 存储编排:可以根据容器自身的需求自动创建存储卷

1.3 K8s组件

1个K8s集群主要是由控制节点(master)、工作节点(node)组成。
master:集群的控制平面,负责集群的决策

  1. ApiServer:资源操作的唯一入口

下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:

  1. 首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
  2. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件
  3. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
  4. 在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
  5. apiServer调用controller-manager去调度Node节点安装nginx服务
  6. kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod。pod是kubernetes的最小操作单元,容器必须跑在pod中。
  7. 自此,一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理。这样,外界用户就可以访问集群中的nginx服务了。

1.4 K8s概念

二、集群环境搭建

在这里插入图片描述

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.60.100:6443 --token v5hiib.lh23uvi2mokbdo1u \
    --discovery-token-ca-cert-hash sha256:2b4f7e703ae46606b4d0e7945098c3e0450baf8914eb93d059456096b559b0c7
[root@master ~]#
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   NotReady   master   6m2s   v1.17.4

在kubernetes安装网络插件flannel时,需要下载一个kube-flannel.yml文件,并且要修改其中的quay.io仓库为quay-mirror.qiniu.com。

<
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值