10 分钟部署一个 Kubernetes 集群

Go语言精选

共 739字,需浏览 2分钟

 · 2020-08-09

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

这个工具能通过两条指令完成一个kubernetes集群的部署:

  1. # 创建一个 Master 节点

  2. $ kubeadm init


  3. # 将一个 Node 节点加入到当前集群中

  4. $ kubeadm join <Master节点的IP和端口>

1. 安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64;

  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多;

  • 集群中所有机器之间网络互通;

  • 可以访问外网,需要拉取镜像;

  • 禁止swap分区。

2. 准备环境

单Master架构图

角色IP
k8s-master192.168.31.61
k8s-node1192.168.31.62
k8s-node2192.168.31.63
  1. 关闭防火墙:

  2. $ systemctl stop firewalld

  3. $ systemctl disable firewalld


  4. 关闭selinux

  5. $ sed -i 's/enforcing/disabled/'/etc/selinux/config # 永久

  6. $ setenforce 0# 临时


  7. 关闭swap

  8. $ swapoff -a # 临时

  9. $ vim /etc/fstab # 永久


  10. 根据规划设置主机名:

  11. $ hostnamectl set-hostname


  12. master添加hosts

  13. $ cat >>/etc/hosts << EOF

  14. 192.168.31.61 k8s-master

  15. 192.168.31.62 k8s-node1

  16. 192.168.31.63 k8s-node2

  17. EOF


  18. 将桥接的IPv4流量传递到iptables的链:

  19. $ cat >/etc/sysctl.d/k8s.conf << EOF

  20. net.bridge.bridge-nf-call-ip6tables =1

  21. net.bridge.bridge-nf-call-iptables =1

  22. EOF

  23. $ sysctl --system # 生效


  24. 时间同步:

  25. $ yum install ntpdate -y

  26. $ ntpdate time.windows.com

3. 安装Docker/kubeadm/kubelet【所有节点】

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

3.1 安装Docker

  1. $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

  2. $ yum -y install docker-ce

  3. $ systemctl enable docker && systemctl start docker

配置镜像下载加速器:

  1. $ cat >/etc/docker/daemon.json << EOF

  2. {

  3. "registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]

  4. }

  5. EOF

  6. $ systemctl restart docker

3.2 添加阿里云YUM软件源

  1. $ cat >/etc/yum.repos.d/kubernetes.repo << EOF

  2. [kubernetes]

  3. name=Kubernetes

  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

  5. enabled=1

  6. gpgcheck=0

  7. repo_gpgcheck=0

  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

  9. EOF

3.3 安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:

  1. $ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

  2. $ systemctl enable kubelet

  • kubelet:systemd守护进程管理

  • kubeadm:部署工具

  • kubectl:k8s命令行管理工具

4. 部署Kubernetes Master

在192.168.31.61(Master)执行。

  1. $ kubeadm init \

  2. --apiserver-advertise-address=192.168.31.61 \

  3. --image-repository registry.aliyuncs.com/google_containers \

  4. --kubernetes-version v1.18.0 \

  5. --service-cidr=10.96.0.0/12 \

  6. --pod-network-cidr=10.244.0.0/16

  • —apiserver-advertise-address 集群通告地址

  • —image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

  • —kubernetes-version K8s版本,与上面安装的一致

  • —service-cidr 集群内部虚拟网络,Pod统一访问入口

  • —pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

拷贝kubectl使用的连接k8s认证文件到默认路径:

  1. mkdir -p $HOME/.kube

  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config


  4. $ kubectl get nodes

  5. NAME STATUS ROLES AGE VERSION

  6. k8s-master NotReady master 2m v1.18.0

如果你在学习中遇到问题或者文档有误可联系阿良~ 微信: init1024

5. 加入Kubernetes Node

在192.168.31.62/63(Node)执行。

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

  1. $ kubeadm join 192.168.31.61:6443--token esce21.q6hetwm8si29qxwn \

  2. --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

  1. $ kubeadm token create --print-join-command

6. 部署容器网络(CNI)

这里使用Flannel作为Kubernetes容器网络方案,解决容器跨主机网络通信。
Flannel是CoreOS维护的一个网络组件,Flannel为每个Pod提供全局唯一的IP,Flannel使用ETCD来存储Pod子网与Node IP之间的关系。flanneld守护进程在每台主机上运行,并负责维护ETCD信息和路由数据包。

  1. $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


  2. # 修改国内镜像地址

  3. $ sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.11.0-amd64#g" kube-flannel.yml

  4. kubectl apply -f kube-flannel.yml


  5. $ kubectl get pods -n kube-system

7. 部署官方Dashboard(UI)

  1. $ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:

  1. $ vi recommended.yaml

  2. ...

  3. kind:Service

  4. apiVersion: v1

  5. metadata:

  6. labels:

  7. k8s-app: kubernetes-dashboard

  8. name: kubernetes-dashboard

  9. namespace: kubernetes-dashboard

  10. spec:

  11. ports:

  12. - port:443

  13. targetPort:8443

  14. nodePort:30001

  15. selector:

  16. k8s-app: kubernetes-dashboard

  17. type:NodePort

  18. ...


  19. $ kubectl apply -f recommended.yaml


  20. $ kubectl get pods -n kubernetes-dashboard

  21. NAME READY STATUS RESTARTS AGE

  22. dashboard-metrics-scraper-6b4884c9d5-gl8nr 1/1 Running 0 13m

  23. kubernetes-dashboard-7f99b75bf4-89cds 1/1 Running 0 13m

访问地址:https://NodeIP:30001

创建service account并绑定默认cluster-admin管理员集群角色:

  1. # 创建用户

  2. $ kubectl create serviceaccount dashboard-admin -n kube-system


  3. # 用户授权

  4. $ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin


  5. # 获取用户Token

  6. $ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用输出的Token登录Dashboard。





- END -





推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注



浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报