• Docker实战技巧(一):Kubernetes基础操作实战


    Kubernetes定位在Saas层,重点解决了微服务大规模部署时的服务编排问题

    1、关闭防火墙并设置开机禁用
      systemctl stop firewalld
      systemctl disable firewalld
    2、配置repo
      cd /etc/yum.repos.d/
      下载Docker repo
      wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      配置kubernetes repo
      vim kubernetes.repo
      [kubernetes]
      name=Kubernetes Repo
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
      gpgcheck=0
      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      enabled=1
      查看是否配置成功yum repolist
    3、配置gpg
      wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      rpm --import rpm-package-key.gpg
      rpm --import yum-key.gpg
    4、安装docker-ce kubernetes
      yum install docker-ce kubelet kubeadm kubectl -y
    5、配置docker初始化
      vi /usr/lib/systemd/system/docker.service
      添加初始化环境变量
      Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
      Environment="NO_PROXY=127.0.0.1/8,172.20.0.0/16"
    6、启动docker设置开机自启动
      systemctl start docker
      systemctl enable docker
    7、忽略swap警报,启动kubelet
      vi /etc/sysconfig/kubelet
      KUBELET_EXTRA_ARGS="--fail-swap-on=false"
      systemctl enable kubelet.service
      systemctl start kubelet
    8、下载k8s镜像
      1)、在github上创建库

        

    092a3a3cdc38aae69ae9ef699f6fd699.png

      2)、克隆到本地然后创建Dockerfile

        

    cc2c5fba6cb049ab50e426f50c1aeea8.png

      每个内容如下

        

    1127a286844d17d9a56d9919f8322c59.png

      然后推送
      3)、在docker hub上创建关联github

        

    4d9450963c27d48352cd0ef45b5b22ec.png

      4)、下载镜像,执行下列脚本

        

    55926dc49503b5c7481f7090bb284eab.png

      5)、初始化,
        kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
      6)、等初始化完成后,配置用户权限
        mkdir -p $HOME/.kube
        sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
        sudo chown $(id -u):$(id -g) $HOME/.kube/config
        然后添加node,在node机上执行
        kubeadm join 192.168.137.200:6443 --token cl60h7.y4o6vpizk64j5cz6 --discovery-token-ca-cert-hash sha256:1fda5b34ecd3abb044ff137e5e74afbeea95cfdb881038ed78961b8d2ef00017
      7)、查看状态
        kubectl get cs
      8)、查看nodes
        kubectl get nodes
      9)、安装flannel
        kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
        等待一段时间使用kubectl get nodes查看节点的状态为Ready,表示安装成功
        启动一个服务
        加入node时如果报错dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启iptables规则乱了,通过下面命令纠正:
        systemctl stop kubelet
        systemctl stop docker
        iptables --flush
        iptables -tnat --flush
        systemctl start kubelet
        systemctl start docker
        kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
        将服务暴露在集群外
        kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
      10)、查看pod
        kubectl get pods
        查看pod起在哪个节点上
        kubectl get pods -o wide
        查看pod有哪些标签
        kubectl get pods --show-labels

          

    e406e9e8a864d4deb3f1c15784a57e40.png

        查看命名空间中的pod
        kubectl get pods --all-namespaces

          

    1a917141c15b54c54d15bfef0555c52a.png

        如果Error、Pending、ImagePullBackOff、CrashLoopBackOff都属于启动失败,排查:
          a、查看 /var/log/messages系统日志
          b、kubectl describe pod kube-flannel-ds-amd64-bq6fp --namespace=kube-system 看出node1上flannel镜像下载失败,去node1上手动下载镜像

            

    ae2a62a924b743ee495fef97d0609e5b.png

          c、kubectl logs -f kube-flannel-ds-amd64-bq6fp -n kube-system kubedns
      11)、删除pod
        kubectl delete pods
        (删除后会自动重新创建pod)
      12)、查看services
        kubectl get svc
        查看services都有选择哪些pod,根据标签
        kubectl get svc -o wide

          

    ea199c1b5d7e4a354ba8cb956b7f51dc.png

      13)、创建一个容器并运行,名字为nginx-deploy,镜像,端口,使用一个pod
        kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
      14)、进入运行中的pod
        kubectl exec nginx-deploy-86bf78c77-kxtch -it sh
      15)、查看deployment
        kubectl get deployment
      16)、查看容器运行在那个node
        kebuctl get node -o wide
      17)、创建service,使用nginx-deploy容器,名称,端口,暴露端口
        kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80
      18)、修改运行实例的个数
        kubectl scale --replicas=3 deployment myapp
      19)、对实例进行升级
        kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.17
      20)、回滚升级
        kubectl rollout undo deployment nginx-deploy
      21)、修改svc
        kubectl edit svc nginx-deploy
        spec:type: NodePort 将type改为 NodePort
        可是在集群外访问node IP

     

     

  • 相关阅读:
    QT基本对话框(基本对话框、工具盒类、进度条、调色板与电子钟、可扩展对话框、程序启动画面)
    尚硅谷设计模式学习(十三)代理模式
    CF1765M Minimum LCM
    输出二叉树第K层结点
    微信小程序 实现天气预报接入
    算法金 | 统计学的回归和机器学习中的回归有什么差别?
    SpringBoot集成Quartz实现定时任务
    SQLAlchemy的使用
    【Spring Boot 使用Filter统一处理请求数据转换】
    我试图通过这篇文章,教会你一种阅读源码的方式。
  • 原文地址:https://blog.csdn.net/u010442378/article/details/132919410