Kubernetes(K8s)从入门到精通

K8s从入门到精通

  • 一、Docker背景和K8s介绍
    • 1.1 应用部署方式演变
    • 1.2 K8s介绍
    • 1.3 K8s组件
    • 1.4 K8s概念
  • 二、集群环境搭建

一、Docker背景和K8s介绍

1.1 应用部署方式演变

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

三种应用部署方式如下图所示。容器化部署方式,相较于虚拟机部署,不需要新建操作系统,直接复用宿主机的操作系统。
Kubernetes(K8s)从入门到精通_第1张图片
当然,容器化部署也会存在一些问题,比如:

  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概念

二、集群环境搭建

Kubernetes(K8s)从入门到精通_第2张图片

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 

你可能感兴趣的:(K8s,kubernetes,docker,运维)