在CoreOS上运行Kubernetes(一)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Kubernetes是谷歌开源的容器集群管理系统,它提供一个统一的工作流程管理运行在集群中的容器Kubernetes引入容器仓的概念,通过容器仓我们可以把一组容器作为一个逻辑上独立的服务部署。
Kubernetes是谷歌开源的容器集群管理系统,它提供一个统一的工作流程管理运行在集群中的容器Kubernetes引入容器仓的概念,通过容器仓我们可以把一组容器作为一个逻辑上独立的服务部署。容器仓的工作原理与当前的一个非常流行的部署模式相匹配,那就是一个容器只运行一个服务。使用Kubernetes很容易做到在一个物理机或集群中运行多个容器仓,从而提高资源的利用率与系统的高可用性。Kubernetes同时提供容器仓的运行状况监控功能,用于保证容器仓在集群中正常运行。
Kubernetes提供的优秀集群协调服务主要依靠分布式键值存储系统etcd。etcd项目使用CoreOS发起并维护的。etcd用于在整个集群中保存和备份Kubernetes的系统数据,依靠Raft一致性算法,etcd可以做到计算机硬件与网络引起的故障恢复。将Kubernetes与etcd同时部署在CoreOS中能够提供更强大的功能,因为CoreOS就是为前文所说的高并发、高可用而构建的操作系统。
现在我们开始使用Kubernetes
保持一个轻松的心情跟随着下文的指导完成Kubernetes的安装配置,并启动一个容器仓运行Redis数据库服务。首先我们需要保证CoreOS正常运行,单节点的CoreOS即可保证下文所描述的操作正常执行。参考CoreOS的官方文档,选择合适的平台安装CoreOS。其次需要下载Kubernetes的一些组件到CoreOS实例中。
为了简单起见,我们下载Kubernetes的所有组件,这些组件包括:
  • apiserver
  • controller-manager
  • kubecfg
  • kubelet
  • proxy
登陆CoreOS并执行如下命令:
[plain]  view plain copy
  1.   
sudo mkdir -p /opt/kubernetes/bin 
sudo chown -R core: /opt/kubernetes
cd /opt/kubernetes
wget https://github.com/kelseyhightower/kubernetes-coreos/releases/download/v0.0.1/kubernetes-coreos.tar.gz
tar -C bin/ -xvf kubernetes-coreos.tar.gz


以上命令执行完以后,Kubernetes的所有组件都下载到了/opt/kubernetes/bin目录下。Kubernetes运行时依赖docker和etcd,然而这两个组件是CoreOS默认支持的,因此就不需要另外安装了。虽然CoreOS推荐将第三方应用程序在docker容器中运行,但是CoreOS确实支持Kubernetes直接在操作系统上运行。启动Kubernetes各组件的最佳方式是创建systemd unit文件并使用systemctl命令。我们通过git下载相关文件:
git clone https://github.com/kelseyhightower/kubernetes-coreos.git
sudo cp kubernetes-coreos/units/* /etc/systemd/system/

启动Kubernetes前需保证etcd已经启动:
sudo systemctl start etcd
使用systemd units文件我们依次执行如下命令:
sudo systemctl start kubernetes-apiserver
sudo systemctl start kubernetes-controller-manager
sudo systemctl start kubernetes-kubelet
sudo systemctl start kubernetes-proxy

恭喜你!你已经成功将Kubernetes在CoreOS上运行。
创建Kubernetes容器仓
容器仓是Kubernetes分组容器与定义逻辑部署单元的基本方式。下面是Redis数据库容器仓的配置文件:
{
  "id": "redis",
  "desiredState": {
    "manifest": {
      "version": "v1beta1",
      "id": "redis",
      "containers": [{
        "name": "redis",
        "image": "dockerfile/redis",
        "ports": [{
           "containerPort": 6379,
          "hostPort": 6379 
         }]
      }]
    }
  },
  "labels": {
    "name": "redis"
  }
}
我们发现容器仓的配置描述了Docker容器和端口映射,容器仓配置文件同样定义了用于服务发现的标签。我们将在下一节详细讨论服务发现,但是现在你只需要知道这个标签用于其他工具发现我们使用Kubernetes提交的容器仓。我们使用kubecfg 命令行工具与Redis容器仓配置文件创建Redis数据库容器仓。
/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 -c kubernetes-coreos/pods/redis.json create /pods
(这条命令的执行速度取决于下载docker下镜像的速度)
如果一切顺利Redis数据库容器仓已经成功运行了,我们可以通过Redis客服端使用docker0网络接口连接我们的容器仓验证:
docker run -t -i dockerfile/redis /usr/local/bin/redis-cli -h 172.17.42.1
(其中IP地址172.17.42.1可能因不同的运行环境而不同,使用docker inspect 命令查看容器IP地址)
使用kubecfg命令显示运行中的容器仓:
/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 list /pods
删除不在使用的容器仓:
/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 delete /pods/redis
总结
希望这篇博客能够证明Kubernetes可以运行在除GCE以外的其他Linux平台中。CoreOS集成Kubernetes特别简单,因为CoreOS对某些Kubernetes依赖的重要服务提供默认支持,比如docker、etcd、systemd。你需要做的仅仅是安装Kubernetes二进制包与systemd units。下一篇博客我们开始讨论Kubernetes的强大能力,包括集群容器管理,服务发现已经Linux容器全生命周期管理。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
JSON Kubernetes Shell
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
101 0
|
3月前
|
Kubernetes 监控 Cloud Native
|
5月前
|
Kubernetes API Perl
在K8S中,如何让Pod运行一次?如何解决一次性任务?
在K8S中,如何让Pod运行一次?如何解决一次性任务?
|
5月前
|
Kubernetes 安全 Serverless
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
79 5
|
5月前
|
Rust Kubernetes 前端开发
在kubernetes上运行WASM负载
在kubernetes上运行WASM负载
56 4
|
5月前
|
Kubernetes 容器 Perl
Kubernetes(K8S) Node NotReady 节点资源不足 Pod无法运行
Kubernetes(K8S) Node NotReady 节点资源不足 Pod无法运行
90 0
|
7月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之运行run-application --target kubernetes-application执行,通过进程的返回码来决定作业是否成功,任务返回码都是0,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8月前
|
缓存 Kubernetes Java
实时计算 Flink版产品使用合集之nk任务在k8s上运行,数据量大时经常失败,并且某个TaskManager被cgroup杀掉,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
SQL Kubernetes 数据处理
实时计算 Flink版产品使用问题之在 flink-conf.yaml 中定义的配置在某些情况下未被正确应用到 K8s 上运行的任务管理器(JobManager)和任务管理节点(TaskManager),是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8月前
|
消息中间件 监控 Kafka
实时计算 Flink版产品使用合集之是否支持在k8s1.27版本上运行
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章