欢迎访问博客原文

本文分享 K8s 单机版本 v1.16.3 安装步骤,安装过程20分钟以内。

K8s最新 Release 版本为 v1.16.4v1.18.0 还是 alpha 版本。

资源需求

  • Master 节点:2 核 2G,本次采用腾讯云按流量计费的 2核4G 服务器,带宽20M用于下载资源。
  • Master 节点局域网IP:172.17.0.7
  • OS:CentOS 7.6 64位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRkuPZP2-1578838895246)(https://imgcdn.chenyongjun.vip/2020/01/12/3.png)]

关于 Kubespray

Kubespray 在 GitHub 描述是:“Deploy a Production Ready Kubernetes Cluster”

Google 的开源工具,用于部署生产级的 K8s 集群。

在腾讯云购买了一台 美国硅谷ECS,使用 kubespray 安装K8s,耗时约10分钟左右,速度很快,这是国外开发者的体验。

在晚上跑个Job,将所需的镜像、工具上传到国内,后续会继续更新新版本的资源,详见最后的附录。

安装步骤

基础准备

这一小节内容在master节点、普通节点都需要执行,本次仅演示master节点。

  • 关闭 SELinux 并修改配置文件为 disabled
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  • 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
  • 安装必要软件

EPEL (Extra Packages for Enterprise Linux):自动配置yum的软件仓库
ansible:自动化运维工具
Jinja2:基于python的模板引擎

yum install -y epel-release ansible
yum install -y python36 python36-devel python36-pip
pip3 install --upgrade Jinja2

处理密钥

生成ssh公私钥对,不要设置密码,直接三次回车即可。仅需在 master 节点生成,普通节点不用处理

ssh-keygen

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sNaRS9f-1578838895247)(https://imgcdn.chenyongjun.vip/2020/01/12/5.png)]

将密钥分发给节点建立SSH通道,此处master也作为普通节点需要分发。若添加新节点也需执行该步骤。

ssh-copy-id root@172.17.0.7

处理 kubespray

下载 kubespray
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 目录执行。

cd kubespray
pip3.6 install -r requirements.txt
生成集群host文件

sample 是样例配置,拷贝出一个新的 mycluster。

cp -rfp inventory/sample inventory/mycluster

通过 Ansible invendor builder 工具, 自动生成 ansible inventory file,IPS中有多个IP(多个节点)时以空格隔开。

declare -a IPS=(172.17.0.7)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

自动生成的 yaml 配置文件如下,将其中的 node1 节点名称改为 master,这样后续普通节点可从 node1 开始命名。

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都在该文件中。

原内容:kube_image_repo: "{{ gcr_image_repo }}/google-containers"
修改为:kube_image_repo: "ccr.ccs.tencentyun.com/easyk8s"
  • 修改 roles/download/defaults/main.yml

下载的资源配置均在其中,下面例举几个:

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

如想手工调整,可参考如下例子:

原内容:etcd_image_repo: "{{ quay_image_repo }}/coreos/etcd"
修改为:etcd_image_repo: "{{ quay_image_repo }}/etcd"

主要是去掉namespace,腾讯云namespace只能有一段。

我已调整好,可直接执行下面命令获取配置

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 }}”

- block:
  - name: download_file | Starting download of file | "{{ download.url }}"

安装

上述配置OK后,直接安装即可。从腾讯云下载比较快,大约十几分钟即可安装完成。

ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v --private-key=~/.ssh/id_rsa

安装完后,日志会打印所有时间信息,虽然不太准。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8k7gA8sn-1578838895248)(https://imgcdn.chenyongjun.vip/2020/01/12/6.png)]

安装好后看看集群基础信息。

查看节点信息

[root@master ~]# kubectl get no
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   10h   v1.16.3

查看集群信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMXuf1Le-1578838895248)(https://imgcdn.chenyongjun.vip/2020/01/12/7.png)]

查看所有Pod信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EN9qMrz-1578838895249)(https://imgcdn.chenyongjun.vip/2020/01/12/8.png)]

至此,安装完毕,消耗时间在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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7Eb7QLm-1578838895249)(https://imgcdn.chenyongjun.vip/2020/01/12/4.png)]

可一次拉取下来。

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。

下载地址如下:

# 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

参考资料


欢迎关注公众号 [陈一乐],一起学习,一起成长

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐