简介:

k8s一个开源的,跨主机管理容器应用集群的编排系统,为应用提供了基础的部署、维护和扩缩容机制。
  • 编排:跨Docker主机同一管理容器集群。
  • 目的
    • 简化开发和运维容器集群的工作。
    • 让开发和运维能把这个系统当一台电脑看待。
  • 特点:没有资源调度算法,只关注容器的管理。


核心概念:

Cluster,即集群:虚拟机或者物理机的一组集合,运行着Kubernetes

  • ETCD

    • 一个分布式强一致性的key/value存储
    • 可理解为一个存储k8s信息的数据库
  • Node
    • 工作节点,运行Master节点交付的任务
    • 能运行一个或多个Pods
    • 运行的组件
      • Kubelet

        • 管理容器的守护进程
        • 管理Docker主机来启动容器的管理程序
        • 定期从etcd获取分配到本机的pod信息,启动或停止容器
        • 接收apiserver的HTTP请求,汇报pod的运行状态
      • Proxy
        • 服务发现(IP寻址)
        • 定期从etcd获取所有的service根据service信息创建代理
        • 客户pod访问其他pod都经过proxy转发
  • Master
    • 提供了集群统一视图的中心控制点
    • 一个Master节点来控制多个Node节点
    • 运行的组件
      • API Server

        • 对操作对象的增删改查
        • 提供RESTful K8s API接口
        • 校验和配置Pod、Service和Replication Controller
        • 统一管理集群系统的入口
      • Scheduler
        • 资源调度
        • 为新建的pod分配机器
      • Controller-Manager
        • 容错处理
        • 扩容、缩容
        • 负责执行各种控制器
          • endpoint-controller

            • 定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的
          • replication-controller
            • 定期关联replicationController和pod,保证定义的复制数量与实际运行pod的数量总是一致的

可操作对象

  • Pod:k8s上可创建、调度和管理的最小单位,是一个或一组拥有共享卷的容器集
  • Replication Controller:管理着Pod的生命周期,建议创建Pod都是用rc,他会确保任何时刻Pod的数量都维持在一个特殊设定的值
  • Service:基本的负载均衡器,为外部某提供一组Pod的一个稳定操作接口


其他概念

  • Label:通过键值对的方式组织和选择操作对象,使用户自定义的标识
  • Annotation:同样是存储管理键值对,相对比Label更大,通常是人类不可识别的非标识的数据
  • Selector:通过匹配Label来确定相关的资源
  • Volume:是一个文件目录,可以当成容器文件系统的一部分,是建立在Docker的Volume基础上的
  • Secret:存储敏感的数据并可以被容器所访问
  • Name:用户赋予一个资源的名称
  • Namespace:命名空间以免相同的Name冲突

由于网上的许多资料都是旧版本的配置方式,和新版的v1不兼容,而且Google官方的文档会涉及到一些被墙的网站,所以即使部署成功了也可能出现无法启动pod的情况,所以尝试了各种配置方式整理出一份符合当前版本和环境的部署文档以供参考。

部署过程:

三台机器配置(皆为Centos7系统):


主机名 IP 角色配置
master 172.16.71.133 主节点,运行kube-apiserver、kube-controller-manager、kube-scheduler和etcd
minion1 172.16.71.129  子节点,运行kubelet、kube-proxy
monion2 172.16.71.132 子节点,运行kubelet、kube-proxy


master节点

安装k8s主节点套件:
sudo yum -y install kubernetes-master
安装ETCD:
sudo yum -y install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm

minion1-2

安装k8s从节点套件:
sudo yum -y install kubernetes-node

关闭防火墙(或者开放指定端口):
sudo systemctl stop firewalld
sudo systemctl disable firewalld

三台机器都将各自的IP和HostName的映射关系写入/etc/hosts文件中。

echo "172.16.71.133 master
172.16.71.129  minion1
172.16.71.132 monion2" >> /etc/hosts

修改配置文件:

master:
sudo vim /etc/kubernetes/config

修改为以下内容:

#配置ETCD服务地址和端口
KUBE_ETCD_SERVERS="--etcd-servers=http://master:4001"
#日志设置
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别设置
KUBE_LOG_LEVEL="--v=0"
#是否运行运行特殊的Docker容器
KUBE_ALLOW_PRIV="--allow_privileged=false"

sudo vim /etc/kubernetes/apiserver

#Matser监听的IP,当前设置表示所有地址
KUBE_API_ADDRESS="--address=0.0.0.0"
#监听地址的端口
KUBE_API_PORT="--port=8080"
#主节点的地址,主要为replication controller和scheduler可以顺利找到apiserver
KUBE_MASTER="--master=http://master:8080"
#从节点上kubelet进程监听的端口号
KUBELET_PORT="--kubelet_port=10250"
#service可以分配的IP地址范围
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
#一些自定义配置
KUBE_API_ARGS=""

ETCD保持默认配置即可(默认为监听4001端口)

minion1-2:

sudo vim /etc/kubernetes/config

#基本和Master的config文件一致
KUBE_ETCD_SERVERS="--etcd-servers=http://master:4001"
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
#Master的config文件中没有此配置,但是子节点要有,如果没有的话kube-proxy会找不到主节点而一致报错
KUBE_MASTER="--master=http://master:8080"

sudo vim /etc/kubernetes/kubelet

#kubelet监听的地址,当前设置表示全部
KUBELET_ADDRESS="--address=0.0.0.0"
#kubelet监听的端口号
KUBELET_PORT="--port=10250"
#设置在Master节点显示的主机名
KUBELET_HOSTNAME="--hostname_override=minion1"
#Master节点的apiserver地址
KUBELET_API_SERVER="--api_servers=http://master:8080"
#自定义设置
KUBELET_ARGS=""

启动服务:

master:
sudo for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do 
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done

minion1-2:
sudo for SERVICES in kube-proxy kubelet docker; do 
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done

之后观察各个节点上的各自进程状态信息可以确认是否正确启动集群。

简单操作测试:

以下操作均在Master节点上进行:

#启动一个pod,其中包括一个nginx容器,这个pod有两份副本,开放的端口为80
kubectl run my-nginx --image=nginx --replicas=2 --port=80

#查看当前运行的pod
kubectl get pods

此时pod的状态会一直是pending(等待),包括containner is creating或者image is not ready on node等异常,这是因为k8s创建pod的时候需要起一个基本容器,而这个镜像的地址被墙了访问不到,所以会导致创建pod成功,运行失败的情况。
解决方法:
从可以访问的Docker Hub上pull这个镜像,重新tag为制定的Image名称即可

docker pull docker.io/kubernetes/pause
docker tag kubernetes/pause gcr.io/google_containers/pause:0.8.0
docker tag gcr.io/google_containers/pause:0.8.0 gcr.io/google_containers/pause

#删除pod
kubectl delete pod ${podName}

由于设置了两份副本,所以删除pod的时候,k8s会迅速起另外一个一模一样的pod以保持副本数量为2不变。
要彻底删除pod,只能删除创建它的replication controller

#查看replication controller
kubectl get rc

#删除replication controller
kubectl delete rc ${rcName}

删除rc之后,其创建的pod会一并删除

Kubernetes概念介绍和v1版本部署过程的更多相关文章

  1. 二、Kubernetes 概念介绍

    一.Master ​ Master指的是集群控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它负责具体的 ...

  2. 部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0)

    部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0) 部署Bookinfo示例程序   在下载的Istio安装包的samples目录中包含了示例应用程序. ...

  3. 云原生时代之Kubernetes容器编排初步探索及部署、使用实战-v1.22

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com Kubernetes官网地址 https://kubernetes.io Kubernetes GitHub源码地址 htt ...

  4. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  5. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

  6. Kubernetes 基本概念介绍

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成 ...

  7. 理解裸机部署过程ironic

    部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...

  8. CQRS之旅——旅程5(准备发布V1版本)

    旅程5:准备发布V1版本 添加功能和重构,为V1版本发布做准备. "大多数人在完成一件事之后,就像留声机的唱片一样,一遍又一遍地使用它,直到它破碎,忘记了过去是用来创造更多未来的东西.&qu ...

  9. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

随机推荐

  1. vbs登陆网站

    Option Explicit Dim objIE Set objIE = CreateObject("InternetExplorer.Application") objIE.V ...

  2. jQuery点击自身以外地方关闭弹出层

    转载自:http://blog.163.com/abkiss@126/blog/static/325941002012111754349590/ 主要功能是点击显示,然后通过点击页面的任意位置都能关闭 ...

  3. rertful规范

    RESTful API的理解 断言 assert 条件(True)执行下面代码 assert 条件(False) 报错 什么是接口? 1- URL,用于进行系统之间操作数据. 2- 面向对象接口,用于 ...

  4. PostgreSQL9.6.3的REDIS测试

    安装redis_fdwcd /usr/local/srcgit clone https://github.com/pg-redis-fdw/redis_fdw.gitcd redis_fdw/git ...

  5. hdu5081

    题意有点绕,不过读懂了之后并不难 以Si结尾容易想到ac自动机,建好ac自动机并将fail指针反向即可得到一棵树 那么操作1就是将若干个子树的并中的节点全部权值+1 操作2就是将求若干个节点到根的路径 ...

  6. 虚拟机Visualbox安装Ubuntu Server

    关于虚拟机的新建及设置,请查看<Visualbox安装Ubuntu网络设置> 从光盘启动系统中,首先是选择语言,我这里选择英文 选择英文安装Ubuntu服务器 继续选择英文 选择地理位置, ...

  7. HDU 6216 A Cubic number and A Cubic Number【数学思维+枚举/二分】

    Problem Description A cubic number is the result of using a whole number in a multiplication three t ...

  8. React中super(props)和super()以及不写super()的区别

    一.constructor()和super()的基本含义 constructor() -- 构造方法 这是ES6对类的默认方法,通过new命令生成对象实例自动调用的方法.并且,该方法是类中必须要有的, ...

  9. mysql主从复制、读写分离

    一.MySql介绍 MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一.但不可忽略的是它本身的功能的确很强大.随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的 ...

  10. 使用scrapy爬取金庸小说目录和章节url

    刚接触使用scrapy的时候,如果一开始就想实现特别复杂的配置,显然是不太现实的,用一些小的例子可以帮助自己理解各个模块. 今天的目标:爬取http://www.luoxia.com/shendiao ...