从一个例子开始认识Kubernetes

  对于绝大多数刚刚接触Kubernetes的人来说,很难顺利的上手和实践。所以我们从一个例子开始初步的对Kubernetes有一个了解:JSP页面通过JDBC直接访问MySQL数据库并展示数据。

  这个例子中我们需要启动连个容器:WebApp容器和MySQL容器。

  废话不多说,我们现在开始。。。

  • 第一步:环境准备

  这一步我们就不在这里赘述了,网上教程一搜一大把。。。

  关闭防火墙、swap、SELinux,安装Docker、etcd和Kubernetes组件等等。。。

  下载MySQL和Tomcat镜像:

1 ]# docker pull mysql:5.5
2 ]# docker pull kubeguide/tomcat-app:v1

  也可以参考我之前的文章:《Kubernetes的基本术语和概念

  • 第二步:启动MySQL服务

  首先我们要为MySQL服务创建一个RC定义文件:mysql-rc.yaml,代码内容如下:

 1 apiVersion: v1
 2 kind: ReplicationController        ## 副本控制器RC
 3 metadata:
 4   name: mysql      ## RC的名称,全局唯一
 5 spec:
 6   replicas: 1      ## Pod副本期待数量
 7   selector:
 8     app: mysql       ## 符合目标的Pod拥有此标签
 9   template:      ## 根据此模板创建Pod实例
10     metadata:
11       labels:
12         app: mysql      ## 副本Pod拥有的标签对应RC的selector
13     spec:
14       containers:          ## Pod内容器定义部分
15       - name: mysql           ## 容器的名称
16         image: mysql:5.5       ## 容器的镜像
17         ports:
18         - containerPort: 3306    ## 容器暴露的端口号
19         env:                 ## 注入容器的环境变量
20         - name: MYSQL_ROOT_PASSWORD
21           value: "123456"

  创建好mysql-rc.yaml文件后,将它发布到Kubernetes集群中。

1 ]# kubectl create -f mysql-rc.yaml

  接下来查看下创建的RC以及Pod的情况:

1 ]# kubectl get rc
2 NAME      DESIRED   CURRENT   READY     AGE
3 mysql     1         1         1         1h
4 ]# kubectl get po
5 NAME                      READY     STATUS    RESTARTS   AGE
6 mysql-px9th               1/1       Running   0          1h

  上述创建没有问题后,我们再创建一个与之关联的mysql的service文件:mysql-svc.yaml。代码内容如下:

1 apiVersion: v1
2 kind: Service    ## 声明是Kubernetes的service文件
3 metadata:
4   name: mysql    ## service的全局唯一名称
5 spec:
6   ports:
7     - port: 3306  ## 服务暴露的端口号
8   selector:       ## service对应的Pod标签名称
9     app: mysql

  运行kubectl命令创建service:

1 ]# kubectl create -f mysql-scv.yaml

  查看创建的service:

]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
mysql        ClusterIP   10.107.188.209   <none>        3306/TCP         1h
注:CLUSTER-IP是在service创建时由Kubernetes自动创建的。  是一个虚地址,随后Kubernetes集群中其他新创建的Pod就可以通过Service的ClusterIP+端口号6379来连接和访问它。  根据Service的唯一名字,容器可以从环境变量中获取到Service对应的ClusterIP地址和端口,从而发起TCP/IP连接请求了。
  • 第三步:启动Tomcat应用

  创建Tomcat的rc文件:tomcat-rc.yaml,代码内容如下:

 1 apiVersion: v1
 2 kind: ReplicationController
 3 metadata:
 4   name: myweb
 5 spec:
 6   replicas: 1     # spec.selector与spec.template.metadata.labels,这两个字段必须相同,否则下一步创建RC会失败。
 7   selector:
 8     app: myweb
 9   template:
10     metadata:
11       labels:
12         app: myweb
13     spec:
14       containers:
15         - name: myweb
16           image: kubeguide/tomcat-app:v1
17           ports:
18           - containerPort: 8080
19           env:
20           - name: MYSQL_SERVICE_HOST
21             value: ‘mysql‘
22           - name: MYSQL_SERVICE_PORT
23             value: ‘3306‘

  创建RC:

1 ]# kubectl create -f myweb-rc.yaml

  查看Tomcat RC是否创建成功:

1 ]# kubectl get rc
2 NAME      DESIRED   CURRENT   READY     AGE
3 mysql     1         1         1         1h
4 myweb     2         2         2         1h
5 ]# kubectl get po
6 NAME                      READY     STATUS    RESTARTS   AGE
7 mysql-px9th               1/1       Running   0          1h
8 myweb-fxq9s               1/1       Running   0          1h
9 myweb-tt5sd               1/1       Running   0          1h

  创建Tomcat的service文件tomcat-svc.yaml,内容如下:

 1 apiVersion: v1
 2 kind: Service
 3 metadata:
 4   name: myweb
 5 spec:
 6   type: NodePort
 7   ports:
 8     - port: 8080
 9       nodePort: 30001
10   selector:
11     app: myweb

注: type: NodePort和nodePort: 30001 这两个属性,表明service开启了外网访问模式。

  创建并查看创建的service状态:

1 ]# kubectl create -f tomcat-svc.yaml
2 ]# kubectl get svc
3 NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
4 mysql        ClusterIP   10.107.188.209   <none>        3306/TCP         1h
5 myweb        NodePort    10.109.40.205    <none>        8080:30001/TCP   1h
  • 第四步:通过浏览器访问页面

  在浏览器打开,地址 http://虚拟机IP:30001/demo/

  点击页面上的add增加一条数据,刷新页面,数据成功入库,到这里我们这个应用服务就完成了!

原文地址:https://www.cnblogs.com/cooper-73/p/9764935.html

时间: 2024-11-06 22:06:23

从一个例子开始认识Kubernetes的相关文章

在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩

上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用,并且已经成功地将一个包含了这个UI5应用的docker镜像上传到Docker hub上. 这篇文章作为这个主题的下半部分,将会介绍如何在Kubernetes里运行这个docker镜像. 文章目录 Kubernetes里的两个重要概念:pod和deployment Kubernetes保证应用程序高可用性和伸缩性的一些体验 Kubernetes滚动升级(Rolling U

iOS 中 #error宏 的使用的一个例子

头文件中如下定义宏: /** * @brief 默认空间名(必填项) */ #error 必填项 #define DEFAULT_BUCKET @"" /** * @brief 默认表单API功能密钥 (必填项) */ #error 必填项 #define DEFAULT_PASSCODE @"" 类的实现中使用: self.bucket = DEFAULT_BUCKET; self.passcode = DEFAULT_PASSCODE; 这样,如果没有初始化这两

一个例子理解threadLocal用法

ThreadLocal可以使对象达到线程隔离的目的.话不多说直接上代码: /** * 一个例子理解threadLocal * * 一个单例模式的类 */ public class SingleThreadLocalTest { private static SingleThreadLocalTest single = new SingleThreadLocalTest(); private ThreadLocal<String> threadLocal = new ThreadLocal<

subsys_initcall宏定义的一个例子,acpi/bus.c里面。

static int __init acpi_init(void) { int result; if (acpi_disabled) { printk(KERN_INFO PREFIX "Interpreter disabled.\n"); return -ENODEV; } acpi_kobj = kobject_create_and_add("acpi", firmware_kobj); if (!acpi_kobj) { printk(KERN_WARNING

js的prototype扩展的一个例子,模仿C#的StringBuilder功能,数组组合字符串,效率大于+拼凑

function StringBuilder() { this._strings_ = new Array;}StringBuilder.prototype.append = function (str) { this._strings_.push(str);};StringBuilder.prototype.toString = function () { return this._strings_.join("");}; js的prototype扩展的一个例子,模仿C#的Strin

javascript闭包的一个例子

<html> <head> <title>elementFromPoint</title> <script type="text/javascript"> window.onload = function(){ for(var i=0; i<6; i++){ var alink = document.createElement('a'); var titleText = document.createTextNode('

线程间共享数据的一个例子

[申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:[email protected]] 题目:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 题目分析: 一.如果数组中全部为负数,则返回最大负数值即可 二.当既有正数也有负数的时候: (1)从左往右叠加,如果当前叠加值小于或者等于0,则放弃,叠加总和清0(加一个负数或者0是毫无意义的),从此位置继续重新叠加 (

用一个例子读懂 RequireJS

用一个例子读懂 RequireJS 例子来自官方,我稍微改造了一下,如下: // project.html <!DOCTYPE html> <html>     <head>         <title>requirejs</title>         <!-- data-main attribute tells require.js to load              scripts/main.js after require.

一个例子教你理解java回调机制

网上很多例子都写的很难理解,笔者刚开始都已经弄晕菜了. 这个例子,应该是再简单,再简洁不过的了,例子目的是测试某个方法的执行时间.这里就写三个java类,一个接口,一个实现,还有一个用于测试时间的类. 要测试的方法,尽量占用执行的时间,这样明显一些,这里测试循环1000000次,并且打印出来. 测试类: public class MyMethod { public void mytest() { // TODO Auto-generated method stub for (int i = 0;