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

[经验分享] k8s基本概念-如何使用Services

[复制链接]

尚未签到

发表于 2018-1-22 10:37:56 | 显示全部楼层 |阅读模式
Services 使用示例

    Virtual IPs and service proxies
    Publishing services - service types
    通过命令行来控制 Service
    通过 yaml 配置文件来定义 Service

Virtual IPs and service proxies

    Proxy-mode: userspace
        轮询
    Proxy-mode: iptables
        v1.2开始作为默认选项
        比 userspace 快
        注意:如果一开始选择的 pod 失去响应后,不能自动重试其他 pod 因而需要定义 readiness probes
        随机
    Proxy-mode: ipvs
        FEATURE STATE: Kubernetes v1.9 beta
        比 iptables 快

Publishing services - service types

    ClusterIP
        创建一个 ClusterIP 来提供集群内部访问
        默认选项
    NodePort
        在每个节点 IP 上暴露一个端口(NodePort)来提供服务,集群外部通过这种方式来访问:<NodeIP>:<NodePort>,同时会创建一个 ClusterIP
        这种类型使用较多
        默认暴露的随机端口范围:30000-32767
        可以通过 nodePort 字段来显式的指定端口
    LoadBalancer
        通过和 cloud provider’s load balancer 关联使用,此时 NodePort and ClusterIP 将自动创建
    ExternalName
        将 service 名称映射到一个 externalName (例如一个域名),通过 kube-dns 来提供 DNS 到 CNAME 记录

通过命令行来控制 Service

    获取和创建 service


    ### 获取所有的 service 列表:
    [iyunv@tvm-00 ~]# kubectl get services
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   5d

创建一个网络类型为 NodePort 的 service 并暴露 pods 的 80 端口

[iyunv@tvm-00 ~]# kubectl expose deployments/test-deployment-app-whoami --type="NodePort" --port 80
service "test-deployment-app-whoami" exposed
再次获取所有的 service 列表:

[iyunv@tvm-00 ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d
test-deployment-app-whoami NodePort 10.108.8.154 <none> 80:31816/TCP 9s
当然,也可以通过 label 来筛选:

[iyunv@tvm-00 ~]# kubectl get services -l app=whoami
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-deployment-app-whoami NodePort 10.108.8.154 <none> 80:31816/TCP 23s


- 查看细节
```bash
### 查看 service 的细节:
[iyunv@tvm-00 ~]# kubectl describe services/test-deployment-app-whoami
Name:                     test-deployment-app-whoami
Namespace:                default
Labels:                   app=whoami
Annotations:              <none>
Selector:                 app=whoami
Type:                     NodePort
IP:                       10.108.8.154
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31816/TCP
Endpoints:                172.30.11.74:80,172.30.11.75:80,172.30.11.77:80 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

### 此处也可以通过 label 来筛选
[iyunv@tvm-00 ~]# kubectl describe services -l app=whoami
Name:                     test-deployment-app-whoami
Namespace:                default
Labels:                   app=whoami
Annotations:              <none>
Selector:                 app=whoami
Type:                     NodePort
IP:                       10.108.8.154
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31816/TCP
Endpoints:                172.30.11.74:80,172.30.11.75:80,172.30.11.77:80 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

    请求 service


    [iyunv@tvm-00 ~]# export NODE_PORT=$(kubectl get services/test-deployment-app-whoami -o go-template='{{(index .spec.ports 0).nodePort}}')
    [iyunv@tvm-00 ~]# echo NODE_PORT=$NODE_PORT
    NODE_PORT=31816

[iyunv@tvm-00 ~]# kubectl get pods -l app=whoami
NAME READY STATUS RESTARTS AGE
test-deployment-app-whoami-6cf9cd6bf4-2dd5m 1/1 Running 0 15h
test-deployment-app-whoami-6cf9cd6bf4-bb7v7 1/1 Running 0 15h
test-deployment-app-whoami-6cf9cd6bf4-c7cht 1/1 Running 0 15h
test-deployment-app-whoami-6cf9cd6bf4-jhtqz 1/1 Running 0 15h
test-deployment-app-whoami-6cf9cd6bf4-px24h 1/1 Running 0 15h
测试请求 10 次的结果:

[iyunv@tvm-00 ~]# for i in $(seq 1 10); do curl -s tvm-00:$NODE_PORT|grep Hostname; done
Hostname: test-deployment-app-whoami-6cf9cd6bf4-jhtqz
Hostname: test-deployment-app-whoami-6cf9cd6bf4-bb7v7
Hostname: test-deployment-app-whoami-6cf9cd6bf4-px24h
Hostname: test-deployment-app-whoami-6cf9cd6bf4-jhtqz
Hostname: test-deployment-app-whoami-6cf9cd6bf4-2dd5m
Hostname: test-deployment-app-whoami-6cf9cd6bf4-c7cht
Hostname: test-deployment-app-whoami-6cf9cd6bf4-c7cht
Hostname: test-deployment-app-whoami-6cf9cd6bf4-bb7v7
Hostname: test-deployment-app-whoami-6cf9cd6bf4-jhtqz
Hostname: test-deployment-app-whoami-6cf9cd6bf4-px24h
符合预期,请求随机分布在 5 个 pods 上


- 删除 service
```bash
[iyunv@tvm-00 ~]# kubectl delete services -l app=whoami
service "test-deployment-app-whoami" deleted
[iyunv@tvm-00 ~]# kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   5d

通过 yaml 配置文件来定义 Service

    创建配置文件


    [iyunv@tvm-00 ~]# cat ~/k8s_install/test/whoami/app.yaml
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
    name: app-whoami
    labels:
    app: whoami
    spec:
    replicas: 3
    selector:
    matchLabels:
      app: whoami
    template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: opera443399/whoami:0.9
          ports:
            - containerPort: 80

apiVersion: v1
kind: Service
metadata:
name: svc-whoami
labels:
app: whoami
spec:
selector:
app: whoami
ports:

    protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080
    type: NodePort


- 执行
```bash
[iyunv@tvm-00 ~]# kubectl apply -f whoami/app.yaml --record
deployment "app-whoami" created
service "svc-whoami" created

    获取信息


    [iyunv@tvm-00 ~]# kubectl get all -l app=whoami
    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    deploy/app-whoami   3         3         3            3           25s

NAME DESIRED CURRENT READY AGE
rs/app-whoami-6cf9cd6bf4 3 3 3 25s

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/app-whoami 3 3 3 3 25s

NAME DESIRED CURRENT READY AGE
rs/app-whoami-6cf9cd6bf4 3 3 3 25s

NAME READY STATUS RESTARTS AGE
po/app-whoami-6cf9cd6bf4-2pxlh 1/1 Running 0 25s
po/app-whoami-6cf9cd6bf4-82ng2 1/1 Running 0 25s
po/app-whoami-6cf9cd6bf4-msbmk 1/1 Running 0 25s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/svc-whoami NodePort 10.96.100.22 <none> 80:30080/TCP 25s


- 测试
```bash
[iyunv@tvm-00 ~]# curl -s 10.96.100.22:80 |grep Hostname
Hostname: app-whoami-6cf9cd6bf4-msbmk
[iyunv@tvm-00 ~]# curl -s tvm-00:30080 |grep Hostname
Hostname: app-whoami-6cf9cd6bf4-2pxlh
[iyunv@tvm-00 ~]# curl -s tvm-01:30080 |grep Hostname
Hostname: app-whoami-6cf9cd6bf4-2pxlh
[iyunv@tvm-00 ~]# curl -s tvm-02:30080 |grep Hostname
Hostname: app-whoami-6cf9cd6bf4-msbmk

运维网声明 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-435938-1-1.html 上篇帖子: k8s基本概念-如何使用Deployments 下篇帖子: k8s附加组件之UI-如何使用dashboard
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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