K8S(Kuberntes)动手实践

一、基本概念及命令行工具kubectl

Kuberntes及容器生态系统

Kubernetes架构

Kubernetes基本概念

部署应用

kubectl run nginx –image=nginx:1.7.9

kubectl get deploy

这一步出现了问题,一直处于ContainerCreating状态。

原因:“image pull failed for gcr.io/google_containers/pause:2.0”。k8s默认从gcr.io/google_containers拉去镜像。无法访问grc.io

解决办法:

修改/etc/hosts文件,添加

61.91.161.217 gcr.io

61.91.161.217 www.gcr.io

再次执行kubectl get deploy

查看应用

kubectl get deploy -o wide

查看更详细的信息

查看pod具体信息

kubectl get pod

查看运行在哪个节点,此IP为docker的ip,并不是固定不变的

kubectl get pod -o wide

查看log并进到获取终端

也可以通过dashboard查看,如下

暴露部署服务,使之能通过外网直接访问

访问http://172.30.20.100:30358

验证部署的服务为什么基于同一个pod

他们都跟192.168.166.129关联。

删除服务

拓展/扩大RS的数量(副本数)

回滚验证(版本升级):

由于镜像问题,不能正常升级。升级是失败的,老版本还活着。可以回滚

回滚

kubernetes有自愈功能,你删除一个pod,它会自己再创建,始终保持3个pod

删除服务

二、Kubernetes的资源调度与资源管理机制(2个元素:Limit Range和Resource Quota)

K8s中调度器模块的基本实现,包括调度场景和功能等,从而帮助用户理解如何配置k8s资源以实现自定义的资源分配。

随着kubernetes集群规模的扩大,kubernetes调度器作为集群的大脑,在如何提高集群的资源利用率、保证集群中服务的稳定运行中也会变得越来越重要。从调度流程、调度算法、资源限制几个方面学习kubernetes调度器。

Kubernetes调度器

Kubernete scheduler主要负责的工作是:接受API Server创建的新pod,并为其安排一个主机,将信息写入etcd中。这个过程中要处理的事情远远没有这么简单,需要综合考虑多种决策因素,比如把一个replication controller的pod分配到不同的主机上,防止因主机节点宕机对业务造成教的冲击;以及如何考虑资源均衡,从而提升整个集群的资源使用率等。

Limit Range

Limit Range设计的初衷是为了满足以下场景:

能够约束租户的资源需求

能够约束容器的资源请求范围

能够约束pod夫人资源请求范围

能够指定容器的默认资源限制

能够指定pod的默认资源限制

能够约束资源请求和限制之间的比例

Resource Quota

Kubernetes是一个多租户架构,当多用户或者团队共享一个Kubernetes系统的时候,系统管理员需要防止租户的资源抢占,定义好资源分配策略。比如Kubernetes系统共有20 核CPU和32GB内存,分配给A租户5核CPU和16GB,分配给B租户5核CPU 和8GB,预留10核CPU和8GB内存。这样,租户中所使用的CPU和内存的总和不能超过指定的资源配额,促使其更合理地使用资源。

Kubernetes提供API对象Resource Quota(资源配额)来实现资源配额,Resource Quota不仅可以作用于CPU和內存,另外还可以限制比如创建Pod的总数目、Service总数目、RC总数目等。

默认情况下,Namespace是没有Resource Quota的,需要另外创建Resource Quota。一旦Namespace中有了Resource Quota,那么创建Pod的时候就必须制定资源请求,否则Pod就会创建失败。

三、K8s存储目前存在的一些问题

  1. Resource Limitation & Separation(资源限制和分离)
  2. Data Replication & Snapshot(数据复制和快照)
  3. Volume Resize and Autoscaling(卷调整和自动调整)
  4. Monitoring and QoS(监控和QoS)
  5. AccessMode
  6. PV Lost

四、PV Controller的初始化过程

五、一个简单的例子

  1. 在虚拟机中启动一个k8s集群以及配置一个NFS服务器
  2. 通过NFS暴露一个共享目录
  3. 创建PV,PVC和Pod,Pod将挂载NFS所暴露的目录

步骤:

1.设置NFS Server

对外暴露/home/centos/allen/nfs-trial目录,并在目录下创建文件abc

vi /etc/exports
/home/centos/allen/nfs-trial *(sync,rw)

执行下个命令之前必须先启动rpcbind,再启动nfs,否则会报错:

service rpcbind start
service nfs start
showmount –e
touch abc
ls .

2.创建PVC

vi pvc.yml

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

  name: myclaim

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 1Gi

      storageClassName: ""

kubectl create –f pvc.yml

kubectl get pvc

3.创建PV

vi pv.yml

kind: PersistentVolume

apiVersion: v1

metadata:

  name: mypv

spec:

  capacity:

    storage: 1Gi

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Recycle

  nfs:

    path: /home/centos/allen/nfs-trial

       server: localhost

kubectl create –f pv.yml

kubectl get pvc

kubectl get pv

4.创建Pod

vi pod.yml

kind: Pod

apiVersion: v1

metadata:

  name: mypod

spec:

  containers:

    - name: mycontainer

      image: nginx

      imagePullPolicy: IfNotPresent

      ports:

        - containerPort: 80

          name: "http-server"

      volumeMounts:

      - mountPath: "/var/data"

        name: data

  volumes:

    - name: data

      persistentVolumeClaim:

        claimName: myclaim

        readOnly: true

kubectl create –f pod.yml

kubectl get pod

5.验证挂载目录

kubectl exec –it mypod /bin/bash

sudo docker ps

sudo docker inspect xxxxxx | grep /var/data

注意:在节点node1上执行该命令,因为容器组mypod在节点node1上

findmnt | grep “/var/lib/kubelet/pods/xxxxxxxx/volumes/kubernetes.io-nfs/mypv”

六、“hello world“示例

web留言板应用:基于PHP+Redis的两层分布式架构的web应用

Hello word 留言板系统

依赖三个镜像:

  1. docker.io/kubeguide/guestbook-php-frontend:WEB前端。PHP Web服务,在网页上展示留言内容,也提供一个文本输入框供访客添加留言。
  2. docker.io/kubeguide/redis-master:写留言。用于前端Web应用进行“写”留言的操作,其中已经保存了一条内容为“Hello World!”的留言。
  3. docker.io/kubeguide/guestbook-redis-slave:读取留言。用于前端Web应用进行“读”留言的操作,并与redis-master的数据保持同步。

声明:如有什么错误还请指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenGd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值