`
wiselyman
  • 浏览: 2093418 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
Group-logo
点睛Spring4.1
浏览量:82285
74ae1471-94c5-3ae2-b227-779326b57435
点睛Spring MVC4...
浏览量:130766
社区版块
存档分类
最新评论

基于Kubespray的生产级Kubernetes部署

阅读更多

源码地址:https://github.com/wiselyman/k8s-installation

1. 前置条件

​ 安装EXSI(VMware vSphere Hypervisor,本例地址为:192.168.1.50):http://dl1.technet24.ir/Downlads/Software/VMware/vCenter/67u3/VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso

​ 安装VCenter(VMware vCenter Server Appliance,本例地址为:192.168.1.51):http://dl1.technet24.ir/Downloads/Software/VMware/vCenter/67u3/VMware-VCSA-all-6.7.0-14367737.iso

使用U盘将VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso刻盘安装EXSI系统到一台物理机,然后打开VMware-VCSA-all-6.7.0-14367737.iso。在vcsa-ui-installer目录下按照不同的系统使用对应的界面安装VCenter。

当然如果你有直接的机器或者虚拟机也是可以的,我们只需要忽略和VMware相关的步骤即可,这次规划9台虚拟机(物理机),分别为3台master(ip:192.168.1.54-56),6台node(ip:192.168.1.57-62)。

2. 准备CentOS系统模板

  • Vsphere client下创建虚拟机目录,名称为k8s

  • VCenter下创建CentOS虚拟机:虚拟机名称为centos7

  • 安装CentOS 7.6虚拟机

  • 安装VMware Tools

    yum install -y open-vm-tools
  • 安装govc:https://github.com/vmware/govmomi/releases

    yum install wget
    wget https://github.com/vmware/govmomi/releases/download/prerelease-v0.21.0-58-g8d28646/govc_linux_amd64.gz
    gzip -d govc_linux_amd64.gz
    chmod +x govc_linux_amd64
    mv govc_linux_amd64 /usr/local/bin/govc
  • 配置govc

    vi .bash_profile 
    
    export GOVC_URL='192.168.1.51'
    export GOVC_USERNAME='administrator@vsphere.local'
    export GOVC_PASSWORD='Wyf.38476'
    export GOVC_INSECURE=1
    
    source .bash_profile 
  • 激活虚拟机UUID,后面为虚拟机名称

    govc vm.change -e="disk.enableUUID=1" -vm='centos7'
  • 安装perl和nettools,ansible定制虚拟机ip需使用

    yum install perl net-tools
  • 关闭防火墙

     systemctl stop firewalld && systemctl disable firewalld
    
  • 时间同步

    yum -y install ntp  && ntpdate ntp1.aliyun.com && systemctl start ntpd && systemctl enable ntpd
    
  • 操作机免密登陆虚拟机

    产生公钥与私钥对:

    ssh-keygen
    

    将本机的公钥复制到远程机器的authorized_keys文件中:

    ssh-copy-id root@192.168.1.5*
  • 将虚拟机制成模板

3. 准备虚拟机

  • 安装ansible

    pip3 install PyVmomi
    pip3 install ansible
  • 编写ansible playbook:vm.yml

    - hosts: 127.0.0.1
      connection: local
      become: root
      gather_facts: false
      serial: 1
      tasks:
        - name:  Create Master Nodes
          vmware_guest:
            hostname: "{{ vcenter_hostname }}"
            username: "{{ vcenter_username }}"
            password: "{{ vcenter_password }}"
            validate_certs: no
            datacenter: "{{ datacenter }}"
            state: present
            folder: "{{ folder }}"
            template: "{{ template }}"
            name: "{{ item.key }}"
            cluster: "{{ cluster }}"
            disk:
              - size_gb: 30
                type: thin
                datastore: datastore1
            hardware:
              memory_mb: 2048
              num_cpus: 2
              scsi: paravirtual
            networks:
              - name: VM Network
                ip: "{{ item.value }}"
                netmask: 255.255.255.0
                gateway: 192.168.1.1
            wait_for_ip_address: True
            customization:
              dns_servers:
                - 202.102.192.68
                - 114.114.114.114
          with_dict: "{{ masters }}"
          delegate_to: localhost
    
    
        - name:  Create Workder Nodes
          vmware_guest:
            hostname: "{{ vcenter_hostname }}"
            username: "{{ vcenter_username }}"
            password: "{{ vcenter_password }}"
            validate_certs: no
            datacenter: "{{ datacenter }}"
            state: present
            folder: "{{ folder }}"
            template: "{{ template }}"
            name: "{{ item.key }}"
            cluster: "{{ cluster }}"
            disk:
              - size_gb: 50
                type: thin
                datastore: datastore1
            hardware:
              memory_mb: 8192
              num_cpus: 4
              scsi: paravirtual
            networks:
              - name: VM Network
                ip: "{{ item.value }}"
                netmask: 255.255.255.0
                gateway: 192.168.1.1
            wait_for_ip_address: True
            customization:
              dns_servers:
                - 202.102.192.68
                - 114.114.114.114
          with_dict: "{{ workers }}"
          delegate_to: localhost
    

    变量信息:group_vars/all.yml

      vcenter_hostname: 192.168.1.51
      vcenter_username: administrator@vsphere.local
      vcenter_password: Wyf.38476
      datacenter: Datacenter
      folder: /k8s
      template: centos7
      vm_name: master1
      cluster:
      masters: {"master1":"192.168.1.54", "matser2":"192.168.1.55","master3":"192.168.1.56"}
      workers: {"node1":"192.168.1.57","node2":"192.168.1.58","node3":"192.168.1.59","node4":"192.168.1.60","node5":"192.168.1.61","node6":"192.168.1.62"}

创建虚拟机:

ansible-playbook vm.yml    

4. 使用kubespray安装

  • 下载kubespray最新发布版:https://github.com/kubernetes-sigs/kubespray/releases,当前最新版为[v2.11.0](https://github.com/kubernetes-sigs/kubespray/releases/tag/v2.11.0)

  • 安装ansible依赖

    sudo pip3 install -r requirements.txt
  • 复制inventory

    cp -rfp inventory/sample inventory/mycluster
  • 使用inventory builder更新inventory文件

    declare -a IPS=(192.168.1.54 192.168.1.55 1192.168.1.56 192.168.1.57 192.168.1.58 192.168.1.59 192.168.1.60 192.168.1.61 192.168.1.62)
    
    CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

    对生成inventory/mycluster/hosts.yml进行修改,主要调整每个虚拟机在集群中承担的角色,修改后的内容如下:

    all:
      hosts:
        master1:
          ansible_host: 192.168.1.54
          ip: 192.168.1.54
          access_ip: 192.168.1.54
          ansible_user: root
        master2:
          ansible_host: 192.168.1.55
          ip: 192.168.1.55
          access_ip: 192.168.1.55
          ansible_user: root
        master3:
          ansible_host: 192.168.1.56
          ip: 192.168.1.56
          access_ip: 192.168.1.56
          ansible_user: root
        node1:
          ansible_host: 192.168.1.57
          ip: 192.168.1.57
          access_ip: 192.168.1.57
          ansible_user: root
        node2:
          ansible_host: 192.168.1.58
          ip: 192.168.1.58
          access_ip: 192.168.1.58
          ansible_user: root
        node3:
          ansible_host: 192.168.1.59
          ip: 192.168.1.59
          access_ip: 192.168.1.59
          ansible_user: root
        node4:
          ansible_host: 192.168.1.60
          ip: 192.168.1.60
          access_ip: 192.168.1.60
          ansible_user: root
        node5:
          ansible_host: 192.168.1.61
          ip: 192.168.1.61
          access_ip: 192.168.1.61
          ansible_user: root
        node6:
          ansible_host: 192.168.1.62
          ip: 192.168.1.62
          access_ip: 192.168.1.62
          ansible_user: root
      children:
        kube-master:
          hosts:
            master1:
            master2:
            master3:
        kube-node:
          hosts:
            node1:
            node2:
            node3:
            node4:
            node5:
            node6:
        etcd:
          hosts:
            master1:
            master2:
            master3:
        k8s-cluster:
          children:
            kube-master:
            kube-node:
        calico-rr:
          hosts: {}
    
  • 设置vsphere做为cloud provider,修改inventory/mycluster/group_vars/all/all.yml,添加下面内容:

    cloud_provider: vsphere
    vsphere_vcenter_ip: "192.168.1.51"
    vsphere_vcenter_port: 443
    vsphere_insecure: 1
    vsphere_user: "administrator@vsphere.local"
    vsphere_password: "Wyf.38476"
    vsphere_datacenter: "Datacenter"
    vsphere_datastore: "datastore1"
    vsphere_working_dir: "k8s"
    vsphere_scsi_controller_type: "pvscsi"
  • 切换下载地址,加速安装

    inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

    # kubernetes image repo define
    kube_image_repo: "gcr.azk8s.cn/google-containers"

    roles/download/defaults/main.yml

    # gcr and kubernetes image repo define
    gcr_image_repo: "gcr.azk8s.cn/google-containers"

    roles/download/defaults/main.yml:按照如下替换

    docker.io -> dockerhub.azk8s.cn (其中官方镜像需要加library/)
    quay.io ->  quay.azk8s.cn
    gcr.io -> gcr.azk8s.cn
    k8s.gcr.io -> gcr.azk8s.cn/google-containers
    
    # Download URLs
    kubeadm_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"
    hyperkube_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/hyperkube"
    etcd_download_url: "https://github.com/coreos/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
    cni_download_url: "https://github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
    calicoctl_download_url: "https://github.com/projectcalico/calicoctl/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
    crictl_download_url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"

    roles/container-engine/docker/defaults/main.yml

    # CentOS/RedHat docker-ce repo
    docker_rh_repo_base_url: 'https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable'
    docker_rh_repo_gpgkey: 'https://mirrors.aliyun.com/docker-ce/linux/centos/gpg'
    
    # CentOS/RedHat Extras repo
    extras_rh_repo_base_url: "https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/"
    extras_rh_repo_gpgkey: "https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7"
  • 安装helm服务端tiller

    roles/kubernetes-apps/helm/defaults/main.yml

    helm_enabled: true
  • 安装Kubernetes集群

    ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml

5. 连接K8s集群

6 存储类配置

基于vsphere的k8s存储,新建storage/vsphere-storage.yml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/vsphere-volume
parameters:
  diskformat: zeroedthick
  datastore: datastore1
kubectl create -f vsphere-storage.yml

测试是否成功,新建storage/test-pvc.yml

 kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvcsc-vsan
  annotations:
    volume.beta.kubernetes.io/storage-class: standard
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
kubectl create -f test-pvc.yml
kubectl describe pvc pvcsc-vsan

此时我们在vsphere client上查看:

7 安装配置Helm

  • 安装helm

    macOS的安装方式:

brew install kubernetes-helm

​ Windows:使用Chocolatey(安装参考:https://chocolatey.org/install)

choco install kubernetes-helm
  • 初始化helm
helm init --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.3 --stable-repo-url  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts/

helm repo update
  • 创建用户tiller用户
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tille
0
0
分享到:
评论

相关推荐

    基于 Kubespray 进行 Kubernetes 的部署 采用 ROOK 存储方案

    整合 Kubespray,Nexus Repository Manager 和 Rook,提供可离线部署 kubernetes 的一套 ansible playbooks。

    基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案四)部署资源包地址

    原文链接:https://blog.csdn.net/m0_37814112/article/details/124467155?spm=1001.2014.3001.5501 说明:由于包超过1G,所以这里存储了云盘下载地址,永久有效!

    基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案二)部署资源包

    这篇博客文章提供了基于Docker在国内互联网环境下使用Kubespray部署高可用K8S集群的具体步骤。下面将详细介绍这个过程中的关键知识点。 1. **Kubernetes(K8S)**:Kubernetes是一个开源的容器编排系统,用于自动化...

    kubernetes常用工具1

    Kubernetes 部署安装手册(基于 kubeadm) Kubernetes 部署安装手册(基于 kubeadm)旨在指导 Kubernetes 部署、开发人员以及有一定 Linux 相关基础的运维人员进行 Kubernetes 集群的部署和安装。 适用对象:本...

    Lab-kubernetesSpray-v1.20.2:Kubernetes基于KubeSpray项目进行部署,使用glusterfs CNS作为存储解决方案

    该项目的目的是部署基础结构,以便在类似于生产的环境中进行学习和测试。 我们创建了两个分支,一个用于kubernetesSpray项目,另一个用于GlusterFS,在此我们修复了检测到的一些问题,我们使用了两个分支来部署...

    Kubernetes(K8s) CKA 认证班(第4期,2021年3月课程,基于V1.20最新版本).rar

    2. **集群部署**:掌握使用kubeadm、kubespray或其他工具部署Kubernetes集群的流程。 3. **资源管理**:了解如何创建和管理各种Kubernetes对象,包括Pod、Service、ConfigMap、Secret等。 4. **网络与服务发现**:...

    如何使用KubeSpray在Azure上构建Kubernetes集群

    KubeSpray则是一个自动化工具,基于Ansible,用于部署多节点Kubernetes集群,支持自动化配置、扩展和升级。 要在Azure上使用KubeSpray,你需要先准备以下要素: 1. **Azure账户**:确保你拥有一个有效的Azure订阅...

    Kubernetes 指南.pdf

    3. **Kubespray**: 多云和混合云环境下的Kubernetes集群自动化部署工具。 **附加组件** Kubernetes生态系统中还包括各种附加组件,如: 1. **Dashboard**: Kubernetes的Web UI,提供图形化管理界面。 2. **Metrics ...

    Kubernetes指南,中文版

    集群部署部分涉及如何使用kubeadm、kops、Kubespray等工具来构建可扩展的生产级Kubernetes集群。 4.3 Kubernetes-The-Hard-Way 这部分提供了详细的指南,用于一步步手动搭建Kubernetes集群,了解内部运作机制。 ...

    Kubernetes 实践指南

    Kubespray是一个基于Ansible的自动化工具,它通过SSH协议在多台远程主机上执行脚本,以安装和配置Kubernetes组件。在搭建前,读者需要下载Kubespray,安装必要的依赖(包括Ansible),并复制一份配置文件。配置文件...

    kubernetes中文文档

    - **集群部署**: 包括使用 kubeadm、kops 或 Kubespray 等工具部署集群。 - **特性开关**: 控制 Kubernetes 的行为和功能。 - **最佳配置**: 最佳实践,如安全性和性能优化建议。 ### 附加组件 介绍了 Kubernetes ...

    kubernetes基础入门

    Kubernetes的目标是为开发者提供一个统一的应用部署平台,使开发者可以轻松地将应用程序从本地开发环境转移到生产环境而无需修改代码。 **1.3 Kubernetes基本概念** - **Pod**: Pod是Kubernetes中最小的可部署单元...

    kubernetes指南(中文版)

    对于集群的部署,kubeadm是一个官方的部署工具,它可以快速搭建Kubernetes集群,而kops、Kubespray等是第三方部署工具,用于在不同云平台上快速部署Kubernetes集群。 网络方面,Kubernetes通过kube-proxy来实现Pod...

    Kubespray单集群生命周期项目介绍.pptx

    Kubespray是一个由SIG-...Kubespray通过这些特性,为用户提供了一个强大且可靠的Kubernetes集群部署和管理解决方案。无论是初创公司还是大型企业,都可以借助Kubespray快速、稳定地构建和管理自己的Kubernetes集群。

    KubesprayClusterOnCloudlab:在Cloudlab上轻松部署kubespray集群

    Kubespray是Kubernetes部署的最佳实践之一,它利用Ansible作为其基础,通过配置YAML文件和执行shell脚本来实现集群的自动化部署。 **Kubespray部署流程** 1. **环境准备**:在开始之前,确保你已经在Cloudlab上...

    Kubernetes指南(Kubernetes Handbook)

    Kubernetes的主要目标是自动化容器的部署、扩展和管理,以实现基于容器的应用的高效运行。它支持跨机器和跨地区的负载均衡,具备服务发现能力,可以进行滚动升级,并且提供了自动伸缩功能,不仅适用于无状态服务,也...

    Kubernetes微服务自动化架构实践.pptx

    因此,Trident项目应运而生,它基于MIT授权,旨在提供一个在中国能够快速部署和管理生产级K8s集群的解决方案。 Trident,取名自海神波塞冬的三叉戟,寓意其强大的控制力。它的核心理念是“Keep it Simple, Stupid”...

    Kubernetes1.13指南(KubernetesHandbook)(书栈网)(202005)

    在部署配置章节,本书提供了 kubectl 安装和使用指南,以及使用 kubeadm 进行单机和集群部署的方法,还涉及到了其他部署工具如 kops、Kubespray、Azure 和 LinuxKit。此外,书中还讨论了 Kubernetes 的网络模型和...

    Kubernets文档整理.zip

    3. **集群安装**:Kubernetes的部署方式多样,可以使用kubeadm、Minikube、Kubespray等工具进行安装。安装过程会涉及到网络设置、存储配置、证书管理等步骤。 4. **资源清单**:YAML或JSON格式的资源清单...

Global site tag (gtag.js) - Google Analytics