摘要:常见的和等都是属于某一个的默认是,而等则不属于任何。其实其的命令和上面都差不多,这里不一一列出了创建查看启动情况是一个定义了一组的策略的抽象,可以理解为抽象到用户层的一个宏观服务。其实这个概念在集群里也有,可以参照理解。
【利用K8S技术栈打造个人私有云系列文章目录】
利用K8S技术栈打造个人私有云(连载之:初章)
利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)
利用K8S技术栈打造个人私有云(连载之:K8S环境理解和练手)
利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)
利用K8S技术栈打造个人私有云(连载之:资源控制研究)
利用K8S技术栈打造个人私有云(连载之:私有云客户端打造)
在前文中我们已经搭建好了K8S集群,接下来就来讲述一下K8S的一些重要的概念和知识,并搞两个例子在集群中来实际练手感受一把!
注: 本文首发于 My 公众号 CodeSheep ,可 长按 或 扫描 下面的 小心心 来订阅 ↓ ↓ ↓
kubernetes的概念非常多,组件也不少,本文主要阐述一下几个最主要、平时用得最频繁的概念,最详细的学习文档是官网教程!
K8S设计架构该图描述的设计架构是一个典型的M-S架构,一主两从,这和我搭建的集群基本是一致的,主节点和从节点上运行哪些kube组件,其实在我搭建集群那篇文章也已经讲过了,下面来阐述一下kubernetes集群里的重要概念和操作命令。
PodPod是Kubernetes中最小的管理元素,Pod是一组容器的集合,且一个Pod只能运行在一个Node上,Pod是kubernetes调度、部署、扩展的基本单位
kubectl run命令创建一个pod:kubectl run pod-example --image=nginx
kubectl create命令创建pod:kubectl create -f create_pod.yaml
删除pod:kubectl delete po pod名
查看pod启动情况:kubectl get pods , kubectl get pods -o wide
查看pod的详细信息:kubectl discrible po pod名
NamespaceNamespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
创建 kubectl create namespace namespace名
删除 kubectl delete namespaces namespace名
查询 kubectl get namespaces
Replication Controller(RC)Replication Controller 保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,Replication Controller就杀死几个,如果太少了,Replication Controller会新建几个,和直接创建的pod不同的是,Replication Controller会替换掉那些删除的或者被终止的pod,而不管删除的原因是什么。
其实其CURD的命令和上面都差不多,这里不一一列出了
创建:kubectl create -f create_rc.json
查看rc启动情况:kubectl get rc
ServiceService 是一个定义了一组Pod的策略的抽象,可以理解为抽象到用户层的一个宏观服务。其实这个概念在Swarm集群里也有,可以参照理解。
Service的这样一层抽象最起码可以抵御两个方面的问题:
Pod重启后IP地址的变化(保持用我们系统的客户其IP不变)
提供负载均衡能力
其CURD的命令和上面都差不多,这里依然不一一列出
创建service:kubectr create -f redis-master-service.json
查看service的启动情况:kubectl get svc
这里给一个Service的示例:
apiVersion: v1 kind: Service metadata: name: my-nginx-svc labels: app: nginx spec: type: LoadBalancer ports: - port: 80 selector: app: nginx
好了,理论的东西看多了可能有点蒙,只能多找点不同的材料阅读并理解了。下面开始做几个练手示例,这几个例子都源自于K8S官网,对于理解理论概念非常有好处,下面开始动手吧!
本例子创建一个包含两个容器的POD,并在容器之间完成文件交换
yaml配置文件如下:
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data emptyDir: {} containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data mountPath: /pod-data command: ["/bin/sh"] args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
创建pod
kubectl create -f two-container-pod.yaml
查看pod和容器的信息
kubectl get pod two-containers --output=yaml
执行完成输出内容大致如下(经过缩减):
apiVersion: v1 kind: Pod metadata: ... name: two-containers namespace: default ... spec: ... containerStatuses: - containerID: docker://c1d8abd1 ... image: debian ... lastState: terminated: // debian容器已停止 ... name: debian-container ... - containerID: docker://96c1ff2c5bb ... image: nginx ... name: nginx-container ... state: running: // nginx容器已运行 ...
可以看到debian容器已经停止了,nginx容器依然运行
我们进入nginx容器的/bin/bash并验证nginx服务器
kubectl exec -it two-containers -c nginx-container -- /bin/bash
执行如下命令来安装curl:
root@two-containers:/# apt-get update root@two-containers:/# apt-get install curl procps root@two-containers:/# ps aux
然后执行curl localhost,可以获得输出:
Hello from the debian container
可见debian容器中写入的东西在nginx容器中获得了,因此文件交换也完成了
用Pod来做一件事很简单吧!
本示例演示的是:部署一个包含Redis集群、基于PHP的留言板系统
创建redis-master的RC
redis-master-controller.yaml内容:
apiVersion: v1 kind: ReplicationController metadata: name: redis-master spec: replicas: 1 selector: name: redis-master template: metadata: name: redis-master labels: name: redis-master spec: containers: - name: redis-master image: kubeguide/redis-master ports: - containerPort: 6379
创建该RC并查看创建结果:
kubectl create -f redis-master-controller.yaml kubectl get rc kubectl get pods
创建redis-master的service
redis-master-service.yaml内容:
apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
创建该Service并查看:
kubectl create -f redis-master-service.yaml kubectl get services
创建redis-slave的RC
redis-slave-controller.yaml文件内容:
apiVersion: v1 kind: ReplicationController metadata: name: redis-slave spec: replicas: 2 selector: # RC通过spec.selector来筛选要控制的Pod name: redis-slave template: metadata: name: redis-slave labels: # Pod的label,可以看到这个label与spec.selector相同 name: redis-slave spec: containers: - name: redis-slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379
创建该RC并查看:
kubectl create -f redis-slave-controller.yaml kubectl get rc kubectl get pods
创建redis-slave的service
redis-slave-service.yaml文件内容:
apiVersion: v1 kind: Service metadata: name: redis-slave labels: name: redis-slave spec: ports: - port: 6379 selector: name: redis-slave
创建该Service并查看:
kubectl create -f redis-slave-service.yaml kubectl get services
创建frontend的RC
frontend-controller.yaml内容如下:
apiVersion: v1 kind: ReplicationController metadata: name: frontend labels: name: frontend spec: replicas: 3 selector: name: frontend template: metadata: labels: name: frontend spec: containers: - name: frontend image: kubeguide/guestbook-php-frontend env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 80
创建该RC并查看
kubectl create -f frontend-controller.yaml kubectl get rc kubectl get pods
创建frontend的Service
frontend-service.yaml文件内容如下:
apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: name: frontend
创建该Service并查看
kubectl create -f frontend-service.yaml kubectl get services
访问http://your-host:30001/
简单的留言板系统就生成了!
作者更多的原创文章在此,欢迎观赏
My Personal Blog
作者更多的SpringBt实践文章在此:
Spring Boot应用监控实战
SpringBoot应用部署于外置Tomcat容器
ElasticSearch搜索引擎在SpringBt中的实践
初探Kotlin+SpringBoot联合编程
Spring Boot日志框架实践
SpringBoot优雅编码之:Lombok加持
如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:
利用K8S技术栈打造个人私有云 连载文章
从一份配置清单详解Nginx服务器配置
Docker容器可视化监控中心搭建
利用ELK搭建Docker容器化应用日志中心
RPC框架实践之:Apache Thrift
RPC框架实践之:Google gRPC
微服务调用链追踪中心搭建
Docker容器跨主机通信
Docker Swarm集群初探
高效编写Dockerfile的几条准则
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28032.html
摘要:常见的和等都是属于某一个的默认是,而等则不属于任何。其实其的命令和上面都差不多,这里不一一列出了创建查看启动情况是一个定义了一组的策略的抽象,可以理解为抽象到用户层的一个宏观服务。其实这个概念在集群里也有,可以参照理解。 showImg(https://segmentfault.com/img/remote/1460000013229549); 【利用K8S技术栈打造个人私有云系列文...
摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...
摘要:前端技术栈还是非常庞大的,为了能够借助已经存在的轮子来造出一辆车,所以我选择了进行实践。状态的管理的状态管理依靠完成,用其来管理的所有组件状态。私有云客户端打造主页面首先是主页面,可以打开任何一个云主机系统的页面看,基本类似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技术栈打造个人私有...
摘要:因此本篇博文将讲解如何在本地构建一个带组件的底包镜像并上传到上供下载使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S技术栈打造个人私有云(连载之:初章) 利用K8S技术栈打造个人私有云(连载之:K8S集群搭建) 利用K8S技术栈打造个人私...
摘要:因此本篇博文将讲解如何在本地构建一个带组件的底包镜像并上传到上供下载使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S技术栈打造个人私有云(连载之:初章) 利用K8S技术栈打造个人私有云(连载之:K8S集群搭建) 利用K8S技术栈打造个人私...
阅读 3217·2021-11-18 10:02
阅读 1904·2021-09-22 10:54
阅读 2970·2019-08-30 15:43
阅读 2556·2019-08-30 13:22
阅读 1550·2019-08-29 13:57
阅读 1009·2019-08-29 13:27
阅读 702·2019-08-26 14:05
阅读 2490·2019-08-26 13:30