本节带领大家快速体验 k8s 的核心功能:应用部署.访问.Scale Up/Down 以及滚动更新. 部署应用 执行命令: kubectl run kubernetes-bootcamp \ --image=docker.io/jocatalin/kubernetes-bootcamp:v1 \ --port=8080 这里我们通过 kubectl run 部署了一个应用,命名为 kubernetes-bootcamp. Docker 镜像通过 --image 指定. --port 设置应用对外…
据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数量的容器和工作负载.在积累了这么多年的经验后,Google 决定重写这个容器管理系统,并将其贡献到开源社区,让全世界都能受益. 这个项目就是 Kubernetes.简单的讲,Kubernetes 是 Google Omega 的开源版本. 从 2014 年第一个版本发布以来,Kubernetes 迅…
在实践之前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石. Cluster Cluster 是计算.存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用. Master Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行.Master 运行 Linux 操作系统,可以是物理机或者虚拟机.为了实现高可用,可以运行多个 Master. Node Node 的职责是运行容器应用.Node 由…
应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息.Secret 会以 Volume 的形式被 mount 到 Pod,容器可通过文件的方式使用 Secret 中的敏感数据:此外,容器也可以环境变量的方式使用这些数据. Secret 可通过命令行或 YAML 创建.比如希望 Secret 中包含如下信息: 用…
我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu 16.04,当然其他 Linux 也是可以的. 官方安装文档可以参考 https://kubernetes.io/docs/setup/independent/install-kubeadm/ 注意:Kubernetes 几乎所有的安装组件和 Docker 镜像都放在 goolge 自己的网站上,这…
为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replicas=2 等待一段时间,应用部署完成. Kubernetes 部署了 deployment httpd-app,有两个副本 Pod,分别运行在 k8s-node1 和 k8s-node2. 详细讨论整个部署过程. ① kubectl 发送部署请求到 API Server. ② API Server…
上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信. Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal. 执行如下命令部署 flannel: kubectl apply -f https://raw.…
命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML…
上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s-node2 不可用,将 k8s-node2 上的 Pod 标记为 Unknown 状态,并在 k8s-node1 上新创建两个 Pod,维持总副本数为 3. 当 k8s-node2 恢复后,Unknown 的 Pod 会被删除,不过已经运行的 Pod 不会重新调度回 k8s-node2. 删除 n…
容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序,完成后容器就退出. Kubernetes 的 Deployment.ReplicaSet 和 DaemonSet 都用于管理服务类容器:对于工作类容器,我们用 Job. 先看一个简单的 Job 配置文件 myjob.yml: ① batch/v1 是当前 Job 的 apiVersion. ② 指明当前资源…