kubernetes集群应用部署实例

时间:2022-09-05 09:11:07

今天,我们将要带来入门hello world示例,它是一个web留言板应用,基于PHP+Redis的两层分布式架构的web应用,前端PHP web网站通过访问后端Redis数据库完成用户留言的查询和添加功能,具备读写分离能力,留言板内容是从redis中查询到的,首页中添加留言并提交后,留言会被添加到redis中。

有三个前端节点:php-frontend,对网站的访问进行负载均衡

有两个redis后端节点:一个redis-master和两个redis-slave,两个redis-slave从redis-master进行同步数据

php-frontend进行了读写分离,即在写入的时候写入主库,而读取的时候从从库读取。

客户通过客户端访问的时候,访问前端相应的地址即可。

kubernetes集群应用部署实例

整体的架构是这个样子:

kubernetes集群应用部署实例

1.创建redis-master Pod和服务

先定义RC来创建pod,然后定义与之关联的service。

为redis-master服务新建一个名为redis-master-controller.yaml的replicationcontroller定义文件,内容为:

[root@uat-app01 etc]# mkdir /etc/k8s_yaml
[root@uat-app01 k8s_yaml]# vim /etc/k8s_yaml/redis-master-controller.yaml
apiVersion: v1 #指定api版本号
kind: ReplicationController #创建资源的类型:这里为ReplicationController
metadata: #资源元数据
name: redis-master #资源名称
labels: #资源标签
name: redis-master #标签名
spec: #容器的详细定义
replicas: #副本数量:这里为1
selector: #RC通过spec.selector来筛选要控制的Pod
name: redis-master
template: # pod的定义
metadata: # pod元数据
labels: #pod标签
name: redis-master
spec: #指定资源内容
containers: #容器
- name: master #容器名
image: kubeguide/redis-master #使用的镜像
ports: #容器开放对外的端口号:这里为6379
- containerPort:

创建好文件后,执行如下命令:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-master-controller.yaml
replicationcontroller "redis-master" created

查看刚才新建的RC信息:

[root@uat-app01 k8s_yaml]# kubectl get rc
NAME DESIRED CURRENT READY AGE
redis-master 48s

查看pods信息:

[root@uat-app01 k8s_yaml]# kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-2qftt / ContainerCreating 1m

查看pod redis-master-2qftt 信息:

[root@uat-app01 k8s_yaml]# kubectl describe pod redis-master-2qftt
Name: redis-master-2qftt
Namespace: default
Node: uat-ucs02.insightcredit/192.168.1.47
Start Time: Wed, Dec :: +
Labels: name=redis-master
Status: Pending
IP:
Controllers: ReplicationController/redis-master
Containers:
master:
Container ID:
Image: kubeguide/redis-master
Image ID:
Port: /TCP
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count:
Volume Mounts: <none>
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
3m 3m {default-scheduler } Normal Scheduled Successfully assigned redis-master-2qftt to uat-ucs02.insightcredit
3m 18s {kubelet uat-ucs02.insightcredit} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)" 2m 7s {kubelet uat-ucs02.insightcredit} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

这里看到是发生了异常的:

在pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像时出现问题,问题原因是 /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt文件不存在

kubernetes集群应用部署实例

尝试去pull这个镜像,发现缺失文件/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt

[root@uat-app01 k8s_yaml]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

查看该缺失的文件,发现为软连接,缺少名叫rhsm的依赖,查找关于rhsm的依赖包

kubernetes集群应用部署实例

经过查阅发现,该缺少的rhsm包为:python-rhsm

使用yum安装

[root@uat-ucs01 kubernetes]# yum install python-rhsm.x86_64 0:1.19.10-1.el7_4

安装后,该文件存在,问题解决

kubernetes集群应用部署实例

创建于redis-master pod相关联的service,文件内容如下:

[root@uat-app01 k8s_yaml]# vi /etc/k8s_yaml/redis-master-service.yaml

apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
name: redis-master
spec:
ports:
- port: #服务监听的端口号
targetPort: #需要转发到后端pod的端口号,就是容器对外开放的端口号
selector:
name: redis-master

创建service:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-master-service.yaml
service "redis-master" created

查看新建的service:

[root@uat-app01 k8s_yaml]# kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 5h
redis-master 10.254.227.87 <none> /TCP 1m

2.创建redis-slave Pod和服务

为redis-slave服务新建一个名为redis-slave-controller.yaml的replicationcontroller定义文件,内容为:

apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas:
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: kubeguide/guestbook-redis-slave
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort:

创建好文件后,执行如下命令:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-slave-controller.yaml
replicationcontroller "redis-slave" created

查看刚才新建的RC信息:

[root@uat-app01 k8s_yaml]# kubectl get rc redis-slave
NAME DESIRED CURRENT READY AGE
redis-slave 39s

配置文件redis-salve-service.yaml内容如下:

[root@uat-app01 k8s_yaml]# vim /etc/k8s_yaml/redis-slave-service.yaml 

apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port:
selector:
name: redis-slave

创建service:

[root@uat-app01 k8s_yaml]# kubectl create -f redis-slave-service.yaml
service "redis-slave" created

检查service:

[root@uat-app01 k8s_yaml]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 5h
redis-master 10.254.227.87 <none> /TCP 29m
redis-slave 10.254.71.156 <none> /TCP 35s

3.创建fronted pod和服务

创建frontend的rc

[root@uat-app01 k8s_yaml]#  vi /etc/k8s_yaml/frontend-controller.yaml

apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
labels:
name: frontend
spec:
replicas:
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:

创建rc

[root@uat-app01 k8s_yaml]#  kubectl create -f /etc/k8s_yaml/frontend-controller.yaml
replicationcontroller "frontend" created

创建frontend的service,前端的service是需要外部访问的,所以进行如下配置

[root@uat-app01 k8s_yaml]# vi /etc/k8s_yaml/frontend-service.yaml

apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort #外部访问端口形式为:通过node端口形式进行访问
ports:
- port: #服务监听的端口号
nodePort: #node上开放的外部端口
selector:
name: frontend
[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/frontend-service.yaml
service "frontend" created

创建好以上rc、pod、service后查看pod情况

[root@uat-app01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-3bv0p / Running 15h
frontend-kmth2 / Running 15h
frontend-vltkp / Running 15h
redis-master-f59zp / Running 15h
redis-slave-6rxl8 / Running 15h
redis-slave-j4jz0 / Running 15h

在浏览器中输入任意运行frontend的pod的ip地址加上我们定义好的node port 30001

我这里是192.168.1.40:30001

留言板出现了,快来提交我们的留言吧~

hello world

kubernetes集群应用部署实例

kubernetes集群应用部署实例

kubernetes的hello world实例到此完成啦。

转载:http://www.louisvv.com/archives/1179.html

kubernetes集群应用部署实例的更多相关文章

  1. Kubernetes集群的部署方式及详细步骤

    一.部署环境架构以及方式 第一种部署方式 1.针对于master节点 将API Server.etcd.controller-manager.scheduler各组件进行yum install.编译安 ...

  2. 在 Kubernetes 集群快速部署 KubeSphere 容器平台

    KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...

  3. 高可用Kubernetes集群-15&period; 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...

  4. 高可用Kubernetes集群-14&period; 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

  5. Kubernetes 集群安装部署

    etcd集群配置 master节点配置 1.安装kubernetes etcd [root@k8s ~]# yum -y install kubernetes-master etcd 2.配置 etc ...

  6. 高可用Kubernetes集群-12&period; 部署kubernetes-ingress

    参考文档: Github:https://github.com/kubernetes/ingress-nginx Kubernetes ingress:https://kubernetes.io/do ...

  7. 高可用Kubernetes集群-11&period; 部署kube-dns

    参考文档: Github介绍:https://github.com/kubernetes/dns Github yaml文件:https://github.com/kubernetes/kuberne ...

  8. K8S从入门到放弃系列-&lpar;15&rpar;Kubernetes集群Ingress部署

    Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...

  9. K8S从入门到放弃系列-&lpar;12&rpar;Kubernetes集群Coredns部署

    摘要: 集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns. 1)下载yaml配置清单 [root ...

随机推荐

  1. Android带加减的edittext

    看了网上这样自带加减的edittext写得好复杂,还有各种监听事件,我觉得没有必有.于是我自己写了一个. 我这个edittext仅仅限制整数,每次加减1. public class TestEditT ...

  2. WPF 自定义柱状图 BarChart

    WPF 自定义柱状图 当前的Telerik控件.DevExpress控件在图表控件方面做得不错,但是有时项目中需要特定的样式,不是只通过修改图表的模板和样式就能实现的. 或者说,通过修改当前的第三方控 ...

  3. Jmeter 函数

    一._csvRead 函数 _cvsRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数. 步骤: 1.先新建一个文件,例如c.txt,里面的数据存放为 web@qq.com, ...

  4. 转载 教你使用PS来制作unity3D随机地形

  5. KMeans聚类算法Hadoop实现

    Assistance.java  辅助类,功能详见注释 package KMeans; import org.apache.hadoop.conf.Configuration; import org. ...

  6. zoj 1670 Jewels from Heaven

    题意:三个人,在给定正方形内,求第一个人拿到珠宝的概率.珠宝随机出现在正方形内. 思路:中垂线+半平面相交. #include<cstdio> #include<cstring&gt ...

  7. Jenkins系统监测&lpar;转&rpar;

    Jenkins系统监测   Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实施监控集成中存在 ...

  8. pymongo 操作

    python 操作 mongoDB 模块 pymongo 安装方法 sudo pip3 install pymongo 操作步骤 1. 创建数据库连接对象 conn = pymonge.MomgoCl ...

  9. Maven 多模块引用版本的问题 java&period;lang&period;NoSuchMethodError

    环境:Junit测试用例 java.lang.NoSuchMethodError 很明显的错误,肯定是jar版本的问题 前提 Maven 打包并没有这个的问题,估计是做了优化处理 原测试代码 @Run ...

  10. Leetcode 80&period;删除排序数组中的重复项 II By Python

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 ...