前面一篇文章部署好了minikube环境,这次学习下怎么部署app到kubernetes环境当中去。参考的是官网的教程,稍微做了一点改动,为了进一步熟悉go和docker,这里我把教程中的js换成了go,其他学习的朋友可以改成Python,java等其他语言,进行学习。

(1)创建app

这里写了一个简单的hello kubernetes的简单server.go。

package main

import (
"net/http"
"log"
"io"
) func hello(w http.ResponseWriter,r *http.Request) {
io.WriteString(w,"hello, kubetnetes!\n")
} func main() {
http.HandleFunc("/hello",hello)
err := http.ListenAndServe(":8080",nil)
if err != nil {
log.Panic(err)
}
}

编译之后可以运行起来。

[root@localhost src]# go build -o server server.go
[root@localhost src]# ./server

新开一个窗口进行curl,可以看到输出了hello, kubetnetes!

[root@localhost ~]# curl 192.168.42.131:8080/hello
hello, kubetnetes!

(2)创建app的docker镜像

1、编写Dockerfile

比较简单,基于golang的官方镜像开始制作,将编译出来的server二进制复制到bin目录,然后执行二进制启动server。(此处记得将docker源换成国内的,要不然会非常慢。参考:教程

[root@localhost src]# cat Dockerfile
FROM golang:1.10
EXPOSE 8080
COPY server /usr/local/bin/
CMD server
[root@localhost src]#

2、打包镜像

注意要将Dockerfile和编译出来的server二进制放在同一个目录

[root@localhost src]# ls
Dockerfile server server.go
[root@localhost src]# docker build -t server:v1 .
Sending build context to Docker daemon 6.153 MB
Step 1/4 : FROM golang:1.10
Trying to pull repository docker.io/library/golang ...
1.10: Pulling from docker.io/library/golang
05d1a5232b46: Pull complete
5cee356eda6b: Pull complete
89d3385f0fd3: Pull complete
80ae6b477848: Pull complete
94ebfeaaddf3: Pull complete
e132030a369d: Pull complete
c67c5750c788: Pull complete
Digest: sha256:a325153f1f1e2edb76a76ad789aff172b89dd6178e8f74d39ef87c04d87d1961
Status: Downloaded newer image for docker.io/golang:1.10
---> a4afc24299ee
Step 2/4 : EXPOSE 8080
---> Running in ac21ed38b066
---> a28f84e7be93
Removing intermediate container ac21ed38b066
Step 3/4 : COPY server /usr/local/bin/
---> e6050a624a06
Removing intermediate container 248ded7f9ac9
Step 4/4 : CMD server
---> Running in a465911d277d
---> e205f52f0ec8
Removing intermediate container a465911d277d
Successfully built e205f52f0ec8

使用 docker image ls 可以看刚刚做好的镜像。

(3)部署app到k8s

1、利用kubectl run 创建一个deployment 或job 来管理容器

[root@localhost src]# kubectl run hello-k8s --image=server:v1 --port=8080
deployment.apps "hello-k8s" created

2、查看创建的deployment

[root@localhost src]# kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-k8s 1 1 1 0 30s

3、查看pod

[root@localhost src]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-k8s-69c8f4fb76-jx4kg 1/1 Running 0 1m

4、将资源暴露为新的Kubernetes Service。

[root@localhost src]# kubectl expose deployment hello-k8s --type=LoadBalancer
service "hello-k8s" exposed

通过–type=LoadBalancer flag来在群集外暴露Service,在支持负载均衡的云提供商上,将配置外部IP地址来访问Service。在Minikube上,该LoadBalancer type使服务可以通过minikube Service 命令访问。

5、查看暴露后的Kubernetes Service

[root@localhost src]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-k8s LoadBalancer 10.100.59.64 <pending> 8080:31007/TCP 45s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h

6、打开服务

[root@localhost src]# minikube service hello-k8s
Opening kubernetes service default/hello-k8s in default browser...
xdg-open: no method available for opening 'http://192.168.42.131:31007'

在浏览器当中打开http://192.168.42.131:31007/hello就可以看到输出了。

(4)参考资料

https://kubernetes.io/docs/tutorials/hello-minikube/#before-you-begin

kubernetes学习笔记(二)——部署服务的更多相关文章

  1. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  2. Docker Swarm Mode 学习笔记 (部署服务)

    使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点上执行. 新建服务 docker service create --replicas 3 -p 80:80 ...

  3. dubbo学习笔记二(服务调用)

    项目结构 代码示例 由于之前的IEchoService 的一个方法只是在服务端控制台打印,不便在浏览器测试,所以新添加的方法 api和服务端代码变更 public interface IEchoSer ...

  4. Kubernetes 学习笔记(一):基础概念

    个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...

  5. Kubernetes学习笔记(八):Deployment--声明式的升级应用

    概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  8. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  9. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  10. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

随机推荐

  1. pandas处理excel的常用方法技巧(上)

    1. 导库 import pandas as pd 2. 读取excel文件 这里要注意的就是第二个参数header如果不设置,pandas会默认把excel的第一行当作columns,header= ...

  2. c#数据结构之Array、ArrayList、List、LinkedList对比分析

    一.前言: 在c#数据结构中,集合的应用非常广泛,无论是做BS架构还是CS架构开发,都离不开集合的使用,比如我们常见的集合包括:Array.ArrayList.List.LinkedList等.这一些 ...

  3. haproxy+keepalived练习

    小的网站结构 说明:如果部署在云上,比如阿里云上,不需要自己部署keepalived,直接买阿里云的slb即可,slb然后分发流量到两台haproxy机器 一.先部署两个web服务器 编译安装ngin ...

  4. PHP 格式化公钥私钥(pem文件)

    <?php header("Content-Type: text/html; charset=utf-8"); $filename = dirname(__FILE__).& ...

  5. Java 读取Word批注中的文本和图片

    本文将介绍读取Word批注的方法,包括读取Word批注中的文本及图片.关于操作Word批注的方法还可以参考这两篇文章:Java 添加.回复.修改.删除Word批注:Java 给Word指定字符串添加批 ...

  6. SqlServer2005 查询 第七讲 order by

    今天我们来讲sql命令中的参数order by的用法 order by order by:可以理解成[以某个字段排序] order by a,b // a和b都按升序 order by a,b des ...

  7. paper sharing :学习特征演化的数据流

    特征演化的数据流 数据流学习是近年来机器学习与数据挖掘领域的一个热门的研究方向,数据流的场景和静态数据集的场景最大的一个特点就是数据会发生演化,关于演化数据流的研究大多集中于概念漂移检测(有监督学习) ...

  8. VueJS学习之Vue-cli项目模板

    1. 首先是学习vue时需要依赖于node.js和webpack打包工具,具体的安装如下 http://nodejs.cn/download/下载安装nodejs,具体的安装步骤不在此赘述 2. 安装 ...

  9. veu npm run dev指定host

    通常,我们可以在vue项目中的config/index.js指定host,,如下(解host的注释) 但是,在接手的目前项目中,解注释host后,npm run dev并有变为 http://192. ...

  10. 新闻网页通用抽取器GNEv0.04版更新,支持提取正文图片与源代码

    GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来. 我们来看一下它的基本使用方法. 安装 GNE 使用 pip ...