博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在CoreOS上运行Kubernetes(一)
阅读量:2434 次
发布时间:2019-05-10

本文共 2810 字,大约阅读时间需要 9 分钟。

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] 
  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容器全生命周期管理。

转载地址:http://anmmb.baihongyu.com/

你可能感兴趣的文章
一致性hash
查看>>
J.U.C之ConcurrentHashMap分析
查看>>
J.U.C之CopyOnWriteArrayList
查看>>
J.U.C之Atomic&CAS
查看>>
类的生命周期
查看>>
Joda-Time学习
查看>>
Guava扩展工具包
查看>>
Jedis分片策略-一致性Hash
查看>>
BeanFactory和FactoryBean
查看>>
用户态和内核态的概念区别
查看>>
情境领导力
查看>>
赋能:打造应对不确定性的敏捷组织
查看>>
Java 学习方法浅谈
查看>>
Jsp连接数据库大全
查看>>
WebSphere Application Server 常见问题及解答:安全
查看>>
WebSphere Application Server 常见问题及解答:集群
查看>>
使用 SIBus JMS 提供者
查看>>
调试 SCA 调用
查看>>
SOA 治理框架和解决方案架构
查看>>
面向企业的云计算—了解云的一些基本概念
查看>>