陈同学
微服务
Accelerator
About
# 15分钟运维之使用 Kubespray 安装单机版 K8s 本文分享 K8s 单机版本 **v1.16.3** 安装步骤,安装过程20分钟以内。 K8s最新 [Release](https://github.com/kubernetes/kubernetes/releases) 版本为 `v1.16.4`,`v1.18.0` 还是 alpha 版本。 ## 资源需求 * Master 节点:**2 核 2G**,本次采用腾讯云按流量计费的 2核4G 服务器,带宽20M用于下载资源。 * Master 节点局域网IP:**172.17.0.7** * OS:CentOS 7.6 64位  ## 关于 Kubespray [Kubespray](https://github.com/kubernetes-sigs/kubespray) 在 GitHub 描述是:**"Deploy a Production Ready Kubernetes Cluster"**。 Google 的开源工具,用于部署生产级的 K8s 集群。 在腾讯云购买了一台 **美国硅谷ECS**,使用 kubespray 安装K8s,**耗时约10分钟左右**,速度很快,这是国外开发者的体验。 在晚上跑个Job,将所需的镜像、工具上传到国内,后续会继续更新新版本的资源,详见最后的附录。 ## 安装步骤 ### 基础准备 这一小节内容在master节点、普通节点都需要执行,本次仅演示master节点。 * 关闭 SELinux 并修改配置文件为 disabled ```bash setenforce 0 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux ``` * 关闭防火墙 ```bash systemctl disable firewalld systemctl stop firewalld ``` * 安装必要软件 > EPEL (Extra Packages for Enterprise Linux):自动配置yum的软件仓库 > ansible:自动化运维工具 > Jinja2:基于python的模板引擎 ```bash yum install -y epel-release ansible yum install -y python36 python36-devel python36-pip pip3 install --upgrade Jinja2 ``` ### 处理密钥 生成ssh公私钥对,不要设置密码,直接三次回车即可。**仅需在 master 节点生成,普通节点不用处理**。 ```bash ssh-keygen ```  将密钥分发给节点建立SSH通道,此处master也作为普通节点需要分发。若添加新节点也需执行该步骤。 ```bash ssh-copy-id root@172.17.0.7 ``` ### 处理 kubespray #### 下载 kubespray ```bash wget https://github.com/kubernetes-sigs/kubespray/archive/v2.12.0.tar.gz tar -zxvf v2.12.0.tar.gz mv kubespray-2.12.0 kubespray ``` #### 安装依赖 以下所有命令均在 `kubespray` 目录执行。 ```bash cd kubespray pip3.6 install -r requirements.txt ``` #### 生成集群host文件 **sample** 是样例配置,拷贝出一个新的 mycluster。 ```bash cp -rfp inventory/sample inventory/mycluster ``` 通过 **Ansible invendor builder** 工具, 自动生成 ansible inventory file,IPS中有多个IP(多个节点)时以空格隔开。 ```bash declare -a IPS=(172.17.0.7) CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} ``` 自动生成的 yaml 配置文件如下,将其中的 **node1** 节点名称改为 **master**,这样后续普通节点可从 node1 开始命名。 ```yaml all: hosts: node1: ansible_host: 172.17.0.7 ip: 172.17.0.7 access_ip: 172.17.0.7 children: kube-master: hosts: node1: kube-node: hosts: node1: etcd: hosts: node1: k8s-cluster: children: kube-master: kube-node: calico-rr: hosts: {} ``` #### 修改资源地址 安装时默认从国外下载资源,我已将资源上传到腾讯云,直接从腾讯云下载即可,需修改下配置。 * 修改 `inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml` 版本、镜像下载地址、镜像cheksum都在该文件中。 ```yaml 原内容:kube_image_repo: "{{ gcr_image_repo }}/google-containers" 修改为:kube_image_repo: "ccr.ccs.tencentyun.com/easyk8s" ``` * 修改 `roles/download/defaults/main.yml` 下载的资源配置均在其中,下面例举几个: ```yaml kubelet_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet" ... etcd_image_repo: "{{ quay_image_repo }}/coreos/etcd" etcd_image_repo: "{{ quay_image_repo }}/etcd" ``` 需要修改的配置有: * kubelet_download_url、kubectl_download_url、kubeadm_download_url、etcd_download_url、cni_download_url、calicoctl_download_url * etcd_image_repo、calico_node_image_repo、calico_cni_image_repo、calico_policy_image_repo、coredns_image_repo、dashboard_image_repo 如想手工调整,可参考如下例子: ```yaml 原内容:etcd_image_repo: "{{ quay_image_repo }}/coreos/etcd" 修改为:etcd_image_repo: "{{ quay_image_repo }}/etcd" ``` 主要是去掉namespace,腾讯云namespace只能有一段。 **我已调整好,可直接执行下面命令获取配置**: ```bash wget https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/main.yml mv main.yml roles/download/defaults/main.yml wget https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/download_file.yml mv download_file.yml roles/download/tasks/download_file.yml ``` download_file.yml 主要加了日志,例如下面拼接了 **"{{ download.url }}"**。 ```yaml - block: - name: download_file | Starting download of file | "{{ download.url }}" ``` ### 安装 上述配置OK后,直接安装即可。从腾讯云下载比较快,大约十几分钟即可安装完成。 ```bash ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v --private-key=~/.ssh/id_rsa ``` 安装完后,日志会打印所有时间信息,虽然不太准。  安装好后看看集群基础信息。 查看节点信息 ```bash [root@master ~]# kubectl get no NAME STATUS ROLES AGE VERSION master Ready master 10h v1.16.3 ``` 查看集群信息  查看所有Pod信息  至此,安装完毕,消耗时间在20分钟内。 ## 小结 kubespray 很赞,安装非常简单,体验一下就好。 如果使用云服务,直接购买容器服务最方便,提供了K8s各类对象管理控制台。 如果内网自建,就需要自行管理集群。 ## 附录 ### 镜像资源 所需镜像如下: ``` gcr.io/google-containers/k8s-dns-node-cache gcr.io/google-containers/kube-proxy gcr.io/google-containers/kube-apiserver gcr.io/google-containers/kube-controller-manager gcr.io/google-containers/kube-scheduler gcr.io/google-containers/cluster-proportional-autoscaler-amd64 gcr.io/google_containers/kubernetes-dashboard-amd64 gcr.io/google-containers/pause gcr.io/google_containers/pause-amd64 coredns/coredns calico/node calico/cni calico/kube-controllers quay.io/coreos/etcd ``` 在腾讯云容器服务的公有镜像中搜 **easyk8s**。  可一次拉取下来。 ```bash docker pull ccr.ccs.tencentyun.com/easyk8s/k8s-dns-node-cache:1.15.8 docker pull ccr.ccs.tencentyun.com/easyk8s/kube-proxy:v1.16.3 docker pull ccr.ccs.tencentyun.com/easyk8s/kube-apiserver:v1.16.3 docker pull ccr.ccs.tencentyun.com/easyk8s/kube-controller-manager:v1.16.3 docker pull ccr.ccs.tencentyun.com/easyk8s/kube-scheduler:v1.16.3 docker pull ccr.ccs.tencentyun.com/easyk8s/coredns:1.6.0 docker pull ccr.ccs.tencentyun.com/easyk8s/node:v3.7.3 docker pull ccr.ccs.tencentyun.com/easyk8s/cni:v3.7.3 docker pull ccr.ccs.tencentyun.com/easyk8s/kube-controllers:v3.7.3 docker pull ccr.ccs.tencentyun.com/easyk8s/cluster-proportional-autoscaler-amd64:1.6.0 docker pull ccr.ccs.tencentyun.com/easyk8s/kubernetes-dashboard-amd64:v1.10.1 docker pull ccr.ccs.tencentyun.com/easyk8s/etcd:v3.3.10 docker pull ccr.ccs.tencentyun.com/easyk8s/pause:3.1 docker pull ccr.ccs.tencentyun.com/easyk8s/pause-amd64:3.1 ``` ### 工具 包含K8s安装及使用所需的:kubelet、kubectl、kubeadm、calicoctl、cni-plugins。 下载地址如下: ```bash # kubelet https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubelet-v1.16.3-amd64 # kubectl https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubectl-v1.16.3-amd64 # kubeadm https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubeadm-v1.16.3-amd64 # cni-plugins https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/cni-plugins-linux-amd64-v0.8.1.tgz # calicoctl https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/calicoctl ``` ### 参考资料 * [DZone:Kubespray – 10 Simple Steps for Installing a Production-Ready, Multi-Master HA Kubernetes Cluster](https://dzone.com/articles/kubespray-10-simple-steps-for-installing-a-product) * [GitHub: kubespary getting started](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting-started.md) * [CSDN 方志朋:使用Kubespray部署Kubernetes集群](https://blog.csdn.net/forezp/article/details/82730382)
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
15分钟运维之使用 Kubespray 安装单机版 K8s
文章链接:
https://chenyongjun.vip/articles/128
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力