使用 Ansible 和 Vagrant 设置 Kubernetes - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
donaldliu1874
V2EX    云计算

使用 Ansible 和 Vagrant 设置 Kubernetes

  •  
  •   donaldliu1874 2019-03-18 10:49:31 +08:00 2961 次点击
    这是一个创建于 2474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者:Naresh L J ( Infosys )

    图片描述

    目的

    此博客文章介绍了为开发而设的多节点 Kubernetes 集群所需的步骤。此设置提供了类似生产环境的群集,可以在本地计算机上进行。

    为什么需要多节点群集设置?

    多节点 Kubernetes 集群提供类似生产的环境,具有各种优势。尽管 Minikube 提供了很好的入门平台,但它并没有提供使用多节点集群的机会,帮助解决与应用程序设计和体系结构相关的问题或错误。例如,Ops 可以在多节点集群环境中重现问题,测试者可以部署多个版本的应用程序来执行测试用例和验证更改。这些优势使团队能够更快地解决问题,从而提高敏捷性。

    为什么使用 Vagrant 和 Ansible ?

    Vagrant 可以让我们轻松创建虚拟环境,消除导致“在我的机器能工作”现象的陷阱。它可以与多个供应程序一起使用,例如 Oracle VirtualBox、VMware、Docker 等。它允许我们通过使用配置文件来创建一次性环境。

    Ansible 是自动化软件配置管理的基础架构自动化引擎。它是无代理的,允许我们使用 SSH 密钥连接到远程计算机。Ansible playbooks 以 yaml 编写,以简单的文本文件提供库存管理。

    先决条件

    • 在你的机器上安装 Vagrant。可以在此处找到安装二进制文件。
    • Oracle VirtualBox 可以作为 Vagrant 供应程序,也可以使用 Vagrant 官方文档描述的类似供应程序。
    • Ansible 安装在你的机器上。有关特定平台的安装,请参阅Ansible 安装指南

    设置概述

    我们将建立一个 Kubernetes 集群,包含一个主节点和两个工作节点。所有节点将运行 Ubuntu Xenial 64 位操作系统,配置使用 Ansible playbooks。

    第 1 步:创建 Vagrantfile

    使用你喜欢的文本编辑器,创建名为 Vagrantfile 的文件,插入下面的代码。N 的值表示集群中存在的节点数,可以相应地进行修改。在下面的示例中,我们将 N 的值设置为 2。

    IMAGE_NAME = "bento/ubuntu-16.04" N = 2 Vagrant.configure("2") do |config| config.ssh.insert_key = false config.vm.provider "virtualbox" do |v| v.memory = 1024 v.cpus = 2 end config.vm.define "k8s-master" do |master| master.vm.box = IMAGE_NAME master.vm.network "private_network", ip: "192.168.50.10" master.vm.hostname = "k8s-master" master.vm.provision "ansible" do |ansible| ansible.playbook = "kubernetes-setup/master-playbook.yml" end end (1..N).each do |i| config.vm.define "node-#{i}" do |node| node.vm.box = IMAGE_NAME node.vm.network "private_network", ip: "192.168.50.#{i + 10}" node.vm.hostname = "node-#{i}" node.vm.provision "ansible" do |ansible| ansible.playbook = "kubernetes-setup/node-playbook.yml" end end end 

    第 2 步:为 Kubernetes master 创建 Ansible playbook。

    在 Vagrantfile 相同的目录中创建名为 kubernetes-setup 的目录。在 kubernetes-setup 目录中创建两个名为 master-playbook.yml 和 node-playbook.yml 的文件。

    在 master-playbook.yml 文件中,添加以下代码。

    步骤 2.1:安装 Docker 及其相关组件。

    我们将安装以下软件包,然后将名为“ vagrant ”的用户添加到“ docker ”组。

    --- - hosts: all become: true tasks: - name: Install packages that allow apt to be used over HTTPS apt: name: "{{ packages }}" state: present update_cache: yes vars: packages: - apt-transport-https - ca-certificates - curl - gnupg-agent - software-properties-common - name: Add an apt signing key for Docker apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: Add apt repository for stable version apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable state: present - name: Install docker and its dependecies apt: name: "{{ packages }}" state: present update_cache: yes vars: packages: - docker-ce - docker-ce-cli - containerd.io notify: - docker status - name: Add vagrant user to docker group user: name: vagrant group: docker 

    步骤 2.2:如果系统启用了 swap,Kubelet 将无法启动,因此我们使用以下代码禁用 swap。

     - name: Remove swapfile from /etc/fstab mount: name: "{{ item }}" fstype: swap state: absent with_items: - swap - none - name: Disable swap command: swapoff -a when: ansible_swaptotal_mb > 0 

    步骤 2.3:使用以下代码安装 kubelet、kubeadm 和 kubectl。

     - name: Add an apt signing key for Kubernetes apt_key: url: https://packages.cloud.google.com/apt/doc/apt-key.gpg state: present - name: Adding apt repository for Kubernetes apt_repository: repo: deb https://apt.kubernetes.io/ kubernetes-xenial main state: present filename: kubernetes.list - name: Install Kubernetes binaries apt: name: "{{ packages }}" state: present update_cache: yes vars: packages: - kubelet - kubeadm - kubectl 

    步骤 2.3:使用以下代码使用 kubeadm 初始化 Kubernetes 集群(仅适用于主节点)。

     - name: Initialize the Kubernetes cluster using kubeadm command: kubeadm init --apiserver-advertise-address="192.168.50.10" --apiserver-cert-extra-sans="192.168.50.10" --node-name k8s-master --pod-network-cidr=192.168.0.0/16 

    步骤 2.4:使用以下代码为 vagrant 用户设置 kube 配置文件以访问 Kubernetes 集群。

     - name: Setup kubeconfig for vagrant user command: "{{ item }}" with_items: - mkdir -p /home/vagrant/.kube - cp -i /etc/kubernetes/admin.conf /home/vagrant/.kube/config - chown vagrant:vagrant /home/vagrant/.kube/config 

    步骤 2.5:使用以下代码设置容器网络供应商和网络政策引擎。

     - name: Install calico pod network become: false command: kubectl create -f https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/calico.yaml 

    步骤 2.6:生成 kube join 命令将节点加入 Kubernetes 集群,并将该命令存储在名为 join-command 的文件中。

     - name: Generate join command command: kubeadm token create --print-join-command register: join_command - name: Copy join command to local file local_action: copy cOntent="{{ join_command.stdout_lines[0] }}" dest="./join-command" 

    步骤 2.7:使用以下代码设置检查 Docker 守护程序的处理程序。

     handlers: - name: docker status service: name=docker state=started 

    步骤 3:为 Kubernetes 节点创建 Ansible playbook。

    在 kubernetes-setup 目录中创建名为 node-playbook.yml 的文件。

    将以下代码添加到 node-playbook.yml 中

    步骤 3.1:开始添加步骤 2.1 到 2.3 的代码。

    步骤 3.2:使用以下代码将节点加入 Kubernetes 集群。

     - name: Copy the join command to server location copy: src=join-command dest=/tmp/join-command.sh mode=0777 - name: Join the node to cluster command: sh /tmp/join-command.sh 

    步骤 3.3:添加步骤 2.7 中的代码以完成此 playbook。

    第 4 步:完成 Vagrantfile 和 playbooks 后,请按照以下步骤操作。

    $ cd /path/to/Vagrantfile $ vagrant up 

    完成上述所有步骤后,Kubernetes 集群应该已启动并运行。我们可以使用 Vagrant 登录主节点或工作节点,如下所示:

    $ ## Accessing master $ vagrant ssh k8s-master vagrant@k8s-master:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 18m v1.13.3 node-1 Ready <none> 12m v1.13.3 node-2 Ready <none> 6m22s v1.13.3 $ ## Accessing nodes $ vagrant ssh node-1 $ vagrant ssh node-2 

    KubeCon + CloudNativeCon + Open Source Summit 大会日期:

    • 会议日程通告日期:2019 年 4 月 10 日
    • 会议活动举办日期:2019 年 6 月 24 至 26 日

    KubeCon + CloudNativeCon + Open Source Summit 赞助方案

    KubeCon + CloudNaiveCon + Open Source Summit 多元化奖学金现正接受申请

    KubeCon + CloudNativeCon 和 Open Source Summit 即将首次合体落地中国

    KubeCon + CloudNativeCon + Open Source Summit 购票窗口,立即购票!

    CNCF 邀请你加入最终用户社区

    privil
        1
    privil  
       2019-03-18 16:32:40 +08:00
    master 和 node 虚拟机推荐的最低配置是多少啊?
    privil
        2
    privil  
       2019-03-18 16:33:21 +08:00   1
    @privil #1 ……看到了 1g 内存 2cpu
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2768 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 14:41 PVG 22:41 LAX 06:41 JFK 09:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86