设为首页 收藏本站
查看: 3114|回复: 0

[经验分享] k8s e2e的一些测试镜像(一)

[复制链接]

尚未签到

发表于 2018-1-6 06:16:05 | 显示全部楼层 |阅读模式
  测试镜像的代码和DockerFile一般位于kubernetes/test/images

1.serve_hostname
  路径:gcr.io/google_containers/serve_hostname:v1.4
  功能:通过flag控制使用tcp、udp、http模式返回hostname
  使用
  
使用docker命令的方式
  

docker run  -p 9376:9376 gcr.io/google_containers/serve_hostname:v1.4 -tcp=true -udp=false -http=false  

  

  

  TCP
  

# telnet 127.0.0.1 9376  
Trying
127.0.0.1...  
Connected to
127.0.0.1.  
Escape character
is '^]'.  
ff640c2df975
  
Connection closed by foreign host.
  

  这个是TCP短连接,长连接的测试可以找个mysql的镜像来完成
  HTTP
  

# curl 127.0.0.1:9376  
ff640c2df975
  
root@opama
-HP-EliteBook-8560w:/home/opama/workspace/k8s/src/k8s.io/kubernetes# docker ps  
CONTAINER>  
ff640c2df975        gcr.io
/google_containers/serve_hostname:v1.4   "/serve_hostname -tcp"   15 minutes ago      Up 15 minutes       0.0.0.0:9376->9376/tcp   modest_kowalevski  

  

  

  UDP:
  
启动命令需要改变一下
  

docker run  -p 9376:9376/udp gcr.io/google_containers/serve_hostname:v1.4 -tcp=false -udp=true -http=false      

  

  

  自己用go简单写个clientudp_client.go
  

package main  

  
import (
"fmt"  "net"
  "os"
  
)
  

  

  
func main() {
  

// 获取输入  input := os.Args[1]
  // 创建连接
  socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{
  IP:   net.IPv4(127, 0, 0, 1),//modify
  Port: 9376,//modify
  
    })
  if err != nil {
  fmt.Println("连接失败!", err)
  return
  }
  defer socket.Close()
  

  // 发送数据
  fmt.Printf("发送数据:%s \n", input)
  senddata := []byte(input)
  _, err = socket.Write(senddata)
  if err != nil {
  fmt.Println("发送数据失败!", err)
  return
  }
  

  // 接收数据
  data := make([]byte, 4096)
  read, remoteAddr, err := socket.ReadFromUDP(data)
  if err != nil {
  fmt.Println("读取数据失败!", err)
  return
  }
  fmt.Println(read, remoteAddr)
  fmt.Printf("%s\n", data)
  
}
  

  

  

  执行udp发包:
  

# go run udp_client.go  

13 127.0.0.1:9376  
3a323826364f
  

  或
  

go build -ldflags "-s -w"  
.
/udp_client 11111  

  

  

  YAML样例
  

apiVersion: extensions/v1beta1  
kind: Deployment
  
metadata:
  name: servehostname
-deployment  labels:
  name: servehostname
  
spec:
  replicas:
1  selector:
  matchLabels:
  name: servehostname
  template:
  metadata:
  labels:
  name: servehostname
  spec:
  containers:
- image: gcr.io/google_containers/serve_hostname:v1.4  args: [
"-tcp=true","-http=false","-udp=false"]  imagePullPolicy: IfNotPresent
  name: servehostname
  ports:
- containerPort: 9376  protocol: TCP
  resources: {}
  terminationMessagePath:
/dev/termination-log  

  

  

  若想使用env的方式,可以修改原有serve_hostname.go文件
  

func getEnvValueBool(name string,orin bool) bool{if  os.Getenv(name) == "true" {  return
true  }
if  os.Getenv(name) == "false" {  return
false  }
  return orin
  

  
}
  

  

  
func getEnvValueInt(name
string,orin int) int{if  os.Getenv(name) != "" {  value, _ :
= strconv.Atoi(os.Getenv(name))  return value
  }
  return orin
  

  
}
  

  

  
func main() {
  flag.Parse()
*doTCP = getEnvValueBool("mytcp",*doTCP)*doUDP = getEnvValueBool("myudp",*doUDP)*doHTTP = getEnvValueBool("myhttp",*doHTTP)*port = getEnvValueInt("myport",*port  

  

  

2.clusterapi-tester
  路径:gcr.io/google_containers/clusterapi-tester:1.0
  功能:在pod里使用serviceAccount访问apiserver,主要逻辑:
  1.从pod的环境变量里获取KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT
  2.获取/var/run/secrets/kubernetes.io/serviceaccount/下的token
  3.带token访问https://host+port
  4.去做list node,list service等操作,访问成功则起一个8080端口,设置的健康检查成功,失败则健康检查失败
  使用
  YAML样例
  

apiVersion: v1  
kind: Pod
  
metadata:
  name: clusterapi
-tester  
spec:
  containers:
- image: gcr.io/google_containers/clusterapi-tester:1.0  name: clusterapi
-tester  readinessProbe:
  httpGet:
  path:
/healthz  port:
8080  scheme: HTTP
  initialDelaySeconds:
10  timeoutSeconds:
5  failureThreshold:
3  periodSeconds:
10  successThreshold:
1  restartPolicy: OnFailure
  

  实际使用时可去容器里查看env,这里local起的访问不通KUBERNETES_PORT
  

# docker exec -it fd0eb9f6d3a6 /bin/sh  
/ # env
  
KUBERNETES_PORT=tcp://10.0.0.1:443
  
KUBERNETES_SERVICE_PORT=443
  
HOSTNAME=clusterapi-tester
  
SHLVL=1
  
HOME=/root
  
KUBERNETES_PORT_443_TCP_ADDR=10.0.0.1
  
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  
KUBERNETES_PORT_443_TCP_PORT=443
  
KUBERNETES_PORT_443_TCP_PROTO=tcp
  
KUBERNETES_PORT_443_TCP=tcp://10.0.0.1:443
  
KUBERNETES_SERVICE_PORT_HTTPS=443
  
PWD=/
  
KUBERNETES_SERVICE_HOST=10.0.0.1
  
/ # ping 10.0.0.1
  
PING 10.0.0.1 (10.0.0.1): 56 data bytes
  

  访问失败,pod重启
  

  6m    30s     6       {kubelet 127.0.0.1}     spec.containers{clusterapi-tester}      Normal  Pulled          Container image "gcr.io/google_containers/clusterapi-tester:1.0" already present on machine  30s   30s
1       {kubelet 127.0.0.1}     spec.containers{clusterapi-tester}      Normal  Created         Created container with docker>30s   30s
1       {kubelet 127.0.0.1}     spec.containers{clusterapi-tester}      Normal  Started         Started container with docker>5m    7s13      {kubelet 127.0.0.1}     spec.containers{clusterapi-tester}      Warning Unhealthy       Readiness probe failed: Get http://172.17.0.2:8080/healthz: dial tcp 172.17.0.2:8080: getsockopt: connection refused  

  对于serviceAccount的使用可以见http://www.jianshu.com/p/415c5fc6ddcf

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432083-1-1.html 上篇帖子: 关于K8s集群器日志收集的总结 下篇帖子: [k8s]一些技巧性的yaml和dockerfile-docker学习思路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表