K8S初探

K8S初探——基本概念+服务启动

核心概念

  1. Pod:Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。(Pod是一组容器的组合,这些容器一起合作对外提供一个服务)

  2. 复制控制器(Replication Controller,RC)
    RC是K8s集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RC就会启动运行新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本。即使在指定数目为1的情况下,通过RC运行Pod也比直接运行Pod更明智,因为RC也可以发挥它高可用的能力,保证永远有1个Pod在运行。RC是K8s较早期的技术概念,只适用于长期伺服型的业务类型,比如控制小机器人提供高可用的Web服务。(类似于分布式系统中的副本)

  3. 副本集(Replica Set,RS)
    RS是新一代RC,提供同样的高可用能力,区别主要在于RS后来居上,能支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。

  4. 有状态服务集(PetSet)
    RC和RS主要是控制提供无状态服务的,其所控制的Pod的名字是随机设置的,一个Pod出故障了就被丢弃掉,在另一个地方重启一个新的Pod,名字变了、名字和启动在哪儿都不重要,重要的只是Pod总数;而PetSet是用来控制有状态服务,PetSet中的每个Pod的名字都是事先确定的,不能更改。需要关联与该Pod对应的状态。适合于PetSet的业务包括数据库服务MySQL和PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务。使用PetSet,Pod仍然可以通过漂移到不同节点提供高可用,而存储也可以通过外挂的存储来提供高可靠性,PetSet做的只是将确定的Pod与确定的存储关联起来保证状态的连续性。PetSet还只在Alpha阶段,后面的设计如何演变,还要继续观察。

二. 启动

基于Docker启动一个k8s单点服务:

前提

  1. 你必须拥有一台安装有Docker的机器。

  2. 你的内核必须支持 memory and swap accounting 。确认你的linux内核开启了如下配置:

    CONFIG_RESOURCE_COUNTERS=y
    CONFIG_MEMCG=y
    CONFIG_MEMCG_SWAP=y
    CONFIG_MEMCG_SWAP_ENABLED=y
    CONFIG_MEMCG_KMEM=y
    
  3. 以命令行参数方式,在内核启动时开启 memory and swap accounting 选项:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
    

    注意:以上只适用于GRUB2。通过查看/proc/cmdline可以确认命令行参数是否已经成功

    传给内核:

    $cat /proc/cmdline
    BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory
    swapaccount=1
    

第一步. 运行Etcd

docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data

第二步. 启动master

docker run \
--volume=/:/rootfs:ro \
--volume=/sys:/sys:ro \
--volume=/dev:/dev \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged=true \
-d \
gcr.io/google_containers/hyperkube:v1.0.1 \
/hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests

这一步实际上运行的是 kubelet ,并启动了一个包含其他master组件的[pod](…/userguide/pods.md)。

第三步. 运行service proxy

docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2

三. 基本命令及验证

first,下载kubectl二进制程序。

注意: 在OS/X上你需要通过ssh设置端口转发:
boot2docker ssh -L8080:localhost:8080

  1. 列出集群中的节点:

    kubectl get nodes

  2. 运行一个应用

    // 如果你运行了不同的Kubernetes集群,指定 -s http://localhost:8080 来访问本地集群
    kubectl -s http://localhost:8080 run nginx --image=nginx --port=80

  3. 对外暴露服务

    kubectl expose rc nginx --port=80

  4. 获取刚才service的IP地址。有两个IP,第一个是内部IP(CLUSTER_IP),第二个是外部的负载均衡IP。

    kubectl get svc nginx
    // 只获取第一个IP(CLUSTER_IP):
    kubectl get svc nginx --template={{.spec.clusterIP}}

  5. 通过第一个IP(CLUSTER_IP)访问服务:

    curl <insert-cluster-ip-here>

  6. 关闭集群
    上面的各种容器都是运行在 kubelet 程序的管理下,它会保证容器一直运行,甚至容器意外退出时也不例外。所以,如果想关闭集群,你需要首先关闭 kubelet 容器,再关闭其他。
    可以使用 docker kill $(docker ps -aq) 。注意这样会关闭Docker下运行的所有容器,请谨慎使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值