• k8s的使用入门


    1.kubectl命令就是apiserver的客户端工具,可以实现对nodes资源的增删改查.

    # 描述一个节点的信息 
    kubectl describe node k8s-node1
    # 查看k8s集群信息
    kubectl cluster-info
    # 创建并运行pod
    # --image:表示docker官网的镜像名称
    # --replicas:表示创建并启动几个Pod,不写默认就是1个
    # --dry-run:表示并不真正执行,去掉这个参数就会启动pod
    kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
    kubectl run --generator=deployment/apps.v1 # 被强烈反对并且将来会移除这个参数,可以使用:
    kubectl run --generator=run-pod/v1 or kubectl create instead
    kubectl get deployment
    # 1/1表示这个pod里面有一个容器,并且都准备好了,RESTARTs=0表示没有被重启过
    kubectl get pod
    kubectl get pods -o wide
    NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE
    nginx-deploy-84cbfc56b6-w9n4j   1/1     Running   0          4h26m   10.244.2.2   k8s-node2
    # 可以看到nginx在node2节点上运行着,ip地址是10.244.2.2,使用的是node2节点上cni0的地址
    # 在集群内均可访问这个地址,k8s之外是无法访问
    curl -I 10.244.2.2
    # 删除pod,控制器管理pod,删除正在运行的pod,控制器会马上再创建一个新的
    kubectl delete pods nginx-deploy-84cbfc56b6-w9n4j
    

    2.发布端口

    # 缩写:pod(po),service(svc),replicationcontroller(rc),deployment(deploy),replicaset(rs)
    # 起名时注意:以小写字母、数字、字符或'-'组成,不能有下划线
    # 给这个控制器下的pod创建一个service,名字叫my-nginx
    # service的端口(--port)是80,映射到nginx-deploy pod的端口(--target-port)端口是80 
    kubectl expose deployment nginx-deploy --name=my-nginx --port=80 --target-port=80 --protocol=TCP
    kubectl get svc
    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   7d11h
    my-nginx     ClusterIP   10.111.172.213   <none>        80/TCP    31s
    
    # service生成iptables访问规则,把cluster ip对应的地址和port都调度至标签选择器关联到的各pod端
    kubectl describe svc my-nginx
    Name:              my-nginx
    Namespace:         default
    Labels:            run=nginx-deploy # 哪个pod是这个标签,my-nginx就会映射到这个pod上
    Annotations:       <none>
    Selector:          run=nginx-deploy
    Type:              ClusterIP
    IP:                10.111.172.213
    Port:              <unset>  80/TCP
    TargetPort:        80/TCP
    Endpoints:         10.244.2.2:80 # 结束点:具体到pod
    Session Affinity:  None
    Events:            <none>
    # 查看各pod的标签
    kubectl get pods --show-labels
    

    3.DNS解析

    # 查看coredns
    kubectl get pods -n kube-system -o wide | grep coredns
    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   7d16h
    yum -y install bind-utils
    # 起一个busybox,查找完整域名
    kubectl run client --image=busybox --replicas=1 -it --restart=Never
    If you don't see a command prompt, try pressing enter.
    / # cat /etc/resolv.conf 
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    # 使用集群内部DNS解析my-nginx的域名
    dig -t A my-nginx.default.svc.cluster.local @10.96.0.10
    my-nginx.default.svc.cluster.local. 5 IN A	10.111.172.213
    # service用于为pod提供固定访问入口,所以不管pod怎么变,svc实现了"一次创建,永久使用"
    # 在刚才那个busybox中可以使用域名访问到nginx
    wget -O - -q my-nginx
    

    4.动态升级;手动修改svc的参数

    # 控制器deployment也是通过标签选择器来管理Pod的
    kubectl describe deployment nginx-deploy
    # 动态修改replicas副本的数量
    kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
    kubectl get deployment -w # 监控,不会退出
    # 动态扩展副本数量为5个
    kubectl scale --replicas=5 deployment myapp
    # 缩减为3个
    kubectl scale --replicas=3 deployment myapp
    # 创建service
    kubectl expose deployment myapp --name=svc-myapp --port=80
    # 在busybox内部访问svc-myapp,可看到轮询的效果
    wget -O - -q svc-myapp/hostname.html
    # 可以看到这个pod中的容器名为myapp
    kubectl describe pods myapp-9b4987d5-9sxgs
    # 动态升级pod版本,第一个myapp是控制器名,第二个myapp是该控制器下的pod的容器名
    kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
    # 动态查看更新状态
    kubectl rollout status deployment myapp
    # 回滚pod至指定版本,不指定版本表示回滚到上一个版本
    kubectl rollout undo deployment myapp:v1
    # 在iptables中可看到service就是一条规则
    iptables -vnL -t nat
    # 想要在集群外部访问pod,把type: ClusterIP改成NodePort
    kubectl edit svc svc-myapp
    kubectl get svc
    NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        7d17h
    svc-myapp    NodePort    10.102.101.70 <none>        80:30515/TCP   2h
    

      此时这个svc会让node节点开一个端口,监听在30515上,访问http://10.0.0.20:30515/或http://10.0.0.30:30515/都可以得到nginx页面,如果想把type: NodePort改成ClusterIP,出了什么错的话,配置文件的最上面会有提示.

    参考博客:http://blog.itpub.net/28916011/viewspace-2213635/

  • 相关阅读:
    mysql性能调优
    java面试大全
    JVM调优总结
    大数据行业跳槽面试前你需要做什么
    什么是分布式锁?实现分布式锁的方式
    如何保障mysql和redis之间的数据一致性?
    数据倾斜的原因和解决方案
    hive优化
    c# 系统换行符
    12种增强CSS技能并加快开发速度的资源
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/11030137.html
Copyright © 2020-2023  润新知