zoukankan      html  css  js  c++  java
  • 生产环境:ansible自动化部署kubernetes-1.14

    概述:

    本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14,

    集群包含calico、nginx-ingress、HA

    提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingress所需镜像、cfssl包等

    执行tree /root/tmp/ansible-playbooks 可以在files目录下查看所需资源,后续会继续完善本文

    资源地址:https://pan.baidu.com/s/1KAUOY7NWnGXrDmqSd1LVPA 密码:nhbl

    后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK;federationv2联邦多集群管理等,有兴趣的小伙伴可以加入探讨!

    1.配置服务器环境

    image

    !!!注意⚠️

    生产环境建议如上配置,是否在master上部署kubeletkube-proxydockercalico,可根据资源自行判断,服务器配置根据服务需求进行调整。

    1、etcd节点x3 : 注意etcd必须是奇数个节点

    2、master节点x3 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,

    3、node节点x1: 真正应用负载的节点,后面可以根据实际情况很方便的增加节点数

    本文为了展示,服务器配置如下:

    image

    1.1.修改每台节点DNS

    在每台节点上执行:

    cat <<EOF >> /etc/hosts
    192.168.33.1  k8s-master1
    192.168.33.2  k8s-master2
    192.168.33.3  k8s-master3
    192.168.33.4  k8s-node1
    192.168.33.5  k8s-node2
    192.168.33.6  k8s-node3
    192.168.33.7  k8s-node4
    192.168.33.8  k8s-node5
    EOF
    

    1.2.开启k8s-master1对所有节点免密访问

    定义变量,关闭shell后该变量会消失需要重新执行

    ms="k8s-master1 k8s-master2 k8s-master3" && 
    oms="k8s-master2 k8s-master3" &&
    ns="k8s-node1 "
    

    生成并拷贝证书

    ssh-keygen -t rsa && 
    for i in $ms $ns; do ssh-copy-id -i ~/.ssh/id_rsa.pub $i; done
    

    1.3.修改所有节点主机名

    for host in $ms $ns; do
        ssh $host "hostnamectl set-hostname $host";
    Done
    

    1.4.将ansible等资源上传到k8s-master1的~/tmp目录

    解压
    tar -zxvf ansible.tar.gz

    将nodePrepare.sh拷贝到其他节点:

    for host in $ms $ns; do
        scp -r ~/tmp/nodePrepare,sh root@$host:/root/tmp/nodePrepare.sh";
    done
    

    1.5.设置基础环境

    for host in $ms $ns; do
        ssh $host "sh /root/tmp/nodePrepare.sh";
    done
    

    注意:若配置未生效,重启机器生效

    2.部署Kubernetes集群

    2.1.部署ansible运维工具

    设置ansible的部署节点:

    cat>>/etc/ansible/hosts<<EOF
    [master]
    10.8.4.133
    10.8.4.134
    10.8.4.135
    [node]
    10.8.4.136
    EOF
    

    执行:
    ansible all -m ping -u root 
    如图所示
    ansible

    如果有失败节点,请检查ssh免秘是否执行成功。

    2.2.开始部署docker、kubernetes集群组件、相应网络组件及镜像仓库

    设置xxx/ansible-k8s/stage文件,更改环境地址。

    ansible-k8s/stage

    stage讲解

    根据自己的机器更改stage文件。

    之后执行

    ansible-playbook -i /root/tmp/ansible-playbooks/ansible-k8s/stage -u root /root/tmp/ansible-playbooks/ansible-k8s/kubernetes.yml
    

    2.3.验证是否安装成功

    在master节点执行如下命令

    kubectl get cs
    

    cs

    kubectl get nodes --all-namespaces
    

    所有node状态为ready表示集群安装完成

    node

    kubectl get pod -n kube-system
    

    calico 与 coredns  pod搭建成功

    网络组件

    route -n 查看tunl0网络,成功,节点可以ping通podIP

    cacilo

    kubectl get pod -n ingress-nginx
    

    ingress

    2.3.1.部署my-nginx服务,检测

    vi my-nginx.yaml 
    
    apiVersion: apps/v1
    kind: Deployment*
    metadata:
      name: my-nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          k8s-app: my-nginx
      template:
        metadata:
          labels:
            k8s-app: my-nginx
        spec:
          containers:
          - name: my-nginx
            image: nginx:1.9
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-nginx
      labels:
        k8s-app: my-nginx
    spec:
      type: NodePort
      ports:
      - port: 8080
        targetPort: 80
        protocol: TCP
        name: http
      - port: 443
        protocol: TCP
        name: https
      selector:
        k8s-app: my-nginx
    

    2.3.2.部署my-nginx-ingress检测ingress

    vi my-nginx-ingress.yaml
    
    apiVersion: extensions/v1beta1 
    kind: Ingress
    metadata:
      name: submodule-checker-ingress
    spec:
      rules:
      - host: nginx.weave.pub
        http:
          paths:
          - backend:
              serviceName: my-nginx
              servicePort: 80
    
    kubectl create -f my-nginx-ingress.yaml && kubectl create -f my-nginx.yaml
    
    vi /etc/hosts
    

    host

    nginx

    ingress部署成功

    检验coredns可以部署busybox的pod,进入pod,用nslookup查看dns是否可以得到clusterIP

    以上如有问题,可以通过kubectl describe pod XXX或者systemctl status XXX进行查看问题并解决,也可以journalctl -u XXX查看日志信息

    由于网上资源资料太少,所以ansible脚本及资源均为个人手码,整理拿出提供大家参考,觉得有帮助的小伙伴给个赞哟!

    后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK等,有兴趣的小伙伴可以加入探讨。

    哪里有不懂可以私我!欢迎打扰

    参考资料:

    doc of ansible

    使用Ansible + kubeadm部署K8S集群

    二进制部署Kubernetes-v1.14.1集群

  • 相关阅读:
    sublime text3 安装SublimeCodeIntel插件
    进入博客园的第一天
    .NET之Hangfire快速入门和使用
    图片相似性 d-hash算法 C#实践
    同一个Docker swarm集群中部署多版本的测试环境
    C#创建单链表,翻转单链表
    halcon例程学习 一维测量之矩形边缘
    halcon例程学习 一维测量之弧形边缘
    python 圆曲线
    python pygame黑客帝国的简单实现
  • 原文地址:https://www.cnblogs.com/keep-live/p/11390282.html
Copyright © 2011-2022 走看看