k8s基础命令:https://kubernetes.io/zh/docs/reference/kubectl/kubectl-cmds/

k8s基础知识:https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/

一,部署应用

kubectl create deployment my-test-ngx --image=nginx
deployment.apps/my-test-ngx created

二,了解应用

查看deployment

kubectl get deployment
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
my-test-ngx   1/1     1            1           103s
get deployment -o wide
NAME          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
my-test-ngx   1/1     1            1           2m17s   nginx        nginx    app=my-test-ngx

查看pod

kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
my-test-ngx-77d994d88-srhzm   1/1     Running   0          39s
kubectl get pod -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP           NODE                   NOMINATED NODE   READINESS GATES
my-test-ngx-77d994d88-srhzm   1/1     Running   0          2m54s   10.244.0.7   master.oopxiajun.com   <none>           <none>

利用这个IP我们访问下

curl 10.244.0.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

本机浏览器也是可以访问

三,公布应用

kubectl create service clusterip my-test-ngx --tcp=8001:80
service/my-test-ngx created

这里注意:

1:my-test-ngx 这个名字需要与svc 的名字一样。

2:--tcp=8001:80 这里8001是公布对外的端口,80是容器内部端口

我看看svc详细信息

kubectl describe svc/my-test-ngx
Name:              my-test-ngx
Namespace:         default
Labels:            app=my-test-ngx
Annotations:       <none>
Selector:          app=my-test-ngx
Type:              ClusterIP
IP:                10.105.139.80
Port:              8001-80  8001/TCP
TargetPort:        80/TCP
Endpoints:         10.244.0.7:80
Session Affinity:  None
Events:            <none>

可以看到IP:                10.105.139.80

curl 10.105.139.80:8001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

可以访问到这个IP:port对应的容器信息

删掉pod,看看有什么不一样。

#看看pod名
kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
my-test-ngx-77d994d88-srhzm   1/1     Running   0          28m
#删掉pod
[root@master xiajun]# kubectl delete pod my-test-ngx-77d994d88-srhzm
pod "my-test-ngx-77d994d88-srhzm" deleted#再次看看pod
[root@master xiajun]# kubectl get pod
NAME                          READY   STATUS              RESTARTS   AGE
my-test-ngx-77d994d88-vsrwf   0/1     ContainerCreating   0          14s#发现pod名字变了

pod删掉后,又建了一个,pod名字变了,不仅仅是pod名字变了,容器的ip也有变化

kubectl describe svc/my-test-ngx
Name:              my-test-ngx
Namespace:         default
Labels:            app=my-test-ngx
Annotations:       <none>
Selector:          app=my-test-ngx
Type:              ClusterIP
IP:                10.105.139.80
Port:              8001-80  8001/TCP
TargetPort:        80/TCP
Endpoints:         10.244.0.8:80
Session Affinity:  None
Events:            <none>

前面我们看到:Endpoints:         10.244.0.7:80

这是我们看到:Endpoints:         10.244.0.8:80

Name:              my-test-ngx
Namespace:         default
Labels:            app=my-test-ngx
Annotations:       <none>
Selector:          app=my-test-ngx
Type:              ClusterIP
IP:                10.105.139.80
Port:              8001-80  8001/TCP
TargetPort:        80/TCP
Endpoints:         10.244.0.14:80
Session Affinity:  None
Events:            <none>

但是IP:10.105.139.80 是沒变的。所以pod即使是被干掉了,或者某个node的挂掉了,甚至是关机、重启宿主机,我们也一样是可以通过这个ip:port访问的。

curl 10.105.139.80:8001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

很遗憾:这个地址也只能本机访问,用域名也是无法访问的。

curl my-test-ngx
curl: (6) Could not resolve host: my-test-ngx

用k8s本地的域名也是不行的。

curl my-test-ngx.default.svc.cluster.local.
curl: (7) Failed to connect to my-test-ngx.default.svc.cluster.local port 80: Connection refused

那我们怎么才能让应用公布到外网呢?

这里有一个叫kube-dns的svc,

kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   30h

说明k8s有个dns服务器,其ip地址为10.96.0.10

那么我们是否可以将作为我们宿主机的dns服务器呢?我们来试试。

cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain oopxiajun.com
nameserver 192.168.134.2

这儿我们看到了我们nameserver是192.168.134.2

我们改下这个nameserver

vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain oopxiajun.com
nameserver 10.96.0.10

然后访问

curl my-test-ngx.default.svc.cluster.local.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

浏览器中也可以了

这样还是不够的哦。

观察下这个域名 my-test-ngx.default.svc.cluster.local

my-test-ngx:是service的名称,

default:是命名空间

svc.cluster.local:是k8s固定的dns-domain格式

我们要将这个域名改为我们自己定义的就需要在 kubeadm init 是 加入我们的参数  --service-dns-domain

如果不加这个 --service-dns-domain  ,那么默认的dns-domain就是svc.cluster.local.

这个点我们后面再来详细研究。

四,伸缩引用

我们这儿举例 就用 k8s 提供的一个镜像 ikubernetes/myapp

#部署
kubectl create deployment myapp-test --image=ikubernetes/myapp:v1
deployment.apps/myapp-test created#公布节点
kubectl create service clusterip  myapp-test --tcp=80:80
service/myapp-test created#访问
[root@master xiajun]# curl myapp-test.default.svc.cluster.local.
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>#hostname.html 中就是 pod的名称
curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xhkubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
my-test-ngx-77d994d88-f99lf   1/1     Running   0          36m
myapp-test-cc8865788-6s9xh    1/1     Running   0          2m16s

扩容

kubectl scale --replicas=3 deployment myapp-test
deployment.apps/myapp-test scaled

访问

kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
my-test-ngx-77d994d88-f99lf   1/1     Running   0          43m
myapp-test-cc8865788-6s9xh    1/1     Running   0          9m2s
myapp-test-cc8865788-dw6nc    1/1     Running   0          33s
myapp-test-cc8865788-xw2mw    1/1     Running   0          33s
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xh
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xh
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xh
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-xw2mw
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-dw6nc
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xh
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-dw6nc
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-xw2mw
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-6s9xh
[root@master xiajun]# curl myapp-test.default.svc.cluster.local./hostname.html
myapp-test-cc8865788-dw6nc

可以看到是随机访问了pod

Kubernetes:应用部署、应用了解、应用公布、应用伸缩,-image=ikubernetes/myapp:v1相关推荐

  1. Kubernetes中部署Docker registry2.7.1并通过containerd实现拉取镜像到应用Pod的部署

    这里主要介绍一下私有仓库(HTTPS)在Kubernetes中部署的问题,由于Kubernetes将弃用docker,因此这里主要介绍以下使用containerd替换docker后如何从私有仓库拉取镜 ...

  2. Serverless Kubernetes 应用部署及扩缩容

    作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...

  3. Kubernetes入门——Kubernetes应用部署

    郭良帅 百度基础架构部资深工程师 负责云原生产品研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes应用部署』梳理. 视频课程可点击 ...

  4. Kubernetes二进制部署——Flannel网络

    Kubernetes二进制部署--Flannel网络 一.Flannel简介 二.Flannel原理 三.Flannel的作用 四.Flannel 网络配置 1.node 节点安装 docker 2. ...

  5. Kubernetes二进制部署——证书的制作和ETCD的部署

    Kubernetes二进制部署--证书的制作和ETCD的部署 一.实验环境 自签 SSL 证书 二.ETCD集群部署 1.环境部署 2.master节点 3.node1节点 4.node2节点 5.m ...

  6. Kubernetes应用部署模型解析(原理篇)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes应用部署模型解析(原理篇) 博客分类: Kubernetes [编者按]Kubernetes可用来管理Li ...

  7. 利用Helm简化Kubernetes应用部署(2)

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的"charts"目录,我们依次进行解读并进行简单的修改. Chart.ya ...

  8. 利用Helm简化Kubernetes应用部署(1)

    目录 利用Helm简化Kubernetes应用部署  Helm基础  安装Helm  使用Visual Studio 2019为Helm编写一个简单的应用  利用Helm简化Kubernetes应用部 ...

  9. kubernetes中mysql乱码_在kubernetes中部署tomcat与mysql集群-Go语言中文社区

    在kubernetes中部署tomcat与mysql集群之前必须要有以下这些基础: 1. 已安装.配置kubernetes 2. 集群中有tomcat与mysql容器镜像 3. 有docker基础 具 ...

最新文章

  1. php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...
  2. UI设计培训怎么选择就业方向
  3. Struts2获取request三种方法
  4. java学习之单例模式(饿汉式与懒汉式)
  5. 2.1 物理层的基本概念
  6. 金蝶k3rpc服务器不可用_金蝶KIS商贸版常见问题这样解决
  7. YII与Ace Admin 的集成
  8. ARKit何以从同类技术中胜出?
  9. 航空订票系统C++课程设计
  10. 前端轻量级的toolTip插件-Tippy.js
  11. 算法设计与分析之分治法
  12. 如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
  13. C/C++ 自制一个基于zlib的文件的(解)压缩系统
  14. 华为p20所有权限都打开了,QQ消息依然不弹窗提醒?
  15. 我的人工智能之旅——偏斜类问题
  16. chown -R 用户名:组名 ./ 及 chown用法介绍
  17. Linux下安装mldonkey及配置
  18. 苹果获杀手级3D成像专利 可重建3D图像
  19. 下列实型常量不符合c语言,C语言程序设计考试题答案
  20. 一台手机如何在微信语音/视频通话时把声音录下来

热门文章

  1. 中国经济形势开年如何看?
  2. 直播软件系统搭建技术分享
  3. OpenCV、Halcon博客与资源收藏整理备用
  4. 慧数纵览:日产在华三大工厂将减产30,000辆
  5. (每日一练C++)16. 最接近的三数之和
  6. 《茅屋为秋风所破歌》古诗鉴赏
  7. Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To
  8. 【转】免费进入学术数据库
  9. windows2003中了一键还原7.9的招了
  10. win10 双屏显示 鼠标可以从主屏幕左侧滑入右侧竖屏