在CoreOS上运行Kubernetes(一)

本文涉及的产品
云数据库 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容器全生命周期管理。
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5月前
|
Kubernetes Java 容器
如何获取k8s容器里运行的jar包
如何获取k8s容器里运行的jar包
162 0
|
6月前
|
Kubernetes 流计算 容器
Flink on k8s的话,怎么在容器运行前初始化一些脚本?
Flink on k8s的话,怎么在容器运行前初始化一些脚本?
43 1
|
5月前
|
JSON Kubernetes Docker
k8s 集群中运行 docker registry 镜像仓库
k8s 集群中运行 docker registry 镜像仓库
626 0
|
1月前
|
Kubernetes 网络协议 Java
在Kubernetes上运行Flink应用程序时
【2月更文挑战第27天】在Kubernetes上运行Flink应用程序时
37 10
|
6月前
|
Kubernetes 监控 Docker
深入解析 Kubernetes 架构:掌握主节点、工作节点和容器运行时
深入解析 Kubernetes 架构:掌握主节点、工作节点和容器运行时
109 0
|
6月前
|
Kubernetes jenkins 持续交付
jenkins结合k8s构建流水线如何提升运行性能和构建效率
jenkins结合k8s构建流水线如何提升运行性能和构建效率
|
4月前
|
Kubernetes Java 流计算
在Kubernetes上运行Flink应用程序时,你可以使用Flink Kubernetes Client提供的命令来提交作业
在Kubernetes上运行Flink应用程序时,你可以使用Flink Kubernetes Client提供的命令来提交作业
44 6
|
4月前
|
Kubernetes Cloud Native 网络协议
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
226 0
|
5月前
|
Kubernetes 应用服务中间件 nginx
解释一下Kubernetes Minikube是什么,以及如何在本地运行一个Minikube集群
步骤1:准备环境 在开始之前,您需要确保本地环境已经具备以下几个关键的工具和组件:
176 1
|
5月前
|
Kubernetes 应用服务中间件 nginx
如何在本地使用Docker搭建和运行Kubernetes集群
获取Service的访问地址 运行以下命令来获取Service的访问地址:
172 0

推荐镜像

更多