搭建 K8S 集群

前置知识点

(1) kubeadm
kubeadm 是一个 k8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 kubernetes 集群。

(2)二进制包
从 GitHub 下载发行版的二进制包,手动部署每个组件,组成 kubernetes 集群。

Kubeadm 降低部署门槛。单屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用为禁止包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,利于后期维护。

1、基于集群部署工具 kubeadm

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:

  1. 创建一个 master 节点 kubeadm init
  2. 将 node 节点加入到当前集群中 kubeadm join <master 节点的 ip 和端口>
步骤:
  • 安装三台虚拟机,安装操作系统centos7.*
  • 对三个安装之后的操作系统进行初始化操作
  • 在三个节点安装 docker kubelet kubeadm kubectl
  • 在 master 节点执行 kubeadm init 命令进行初始化
  • 在 node 节点上执行 kubeadm join 命令把 node 节点添加到当前群里面
  • 配置网络插件

1.1、环境准备

关闭防火墙:
$ systemctl stop firewalld
$ systemctl disable firewalld

# 关闭selinux
$ sed -i 's/enforcing/disabled/' /etc/selinux/config  // 永久
$ setenforce 0 // 临时

# 关闭 swap
$ swapoff -a // 临时
$ sed -ri 's/.*swap.*/#&/' /etc/fstab // 永久

# 根据规划设置主机名
$ hostnamectl set-hostname <hostname>

# 在 master 添加 hosts
$ cat > /etc/hosts << EOF
192.1.**.** master
192.1.**.** node1
192.1.**.** node2
 EOF

# 将桥接的 ipv4 流量传递到 iptables 的链,所有机器都设置
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system // 生效

# 时间同步
$ yum install ntpdate -y
$ ntpdate time.windows.com

1.2、所有节点安装 Docker、kubeadm、kubelet

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

1.2.1、安装 Docker

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
/etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-2.e17
$ systemctl enable docker && systemctl start docker
$ docker --version
$ Docker version 18.06.1-ce. build e68fc7a
$ cat > /etc/docker/daemon.json << EOF
{
  'registry-mirrors': ['https://<阿里云申请ID>.mirror.aliyuncs.com']
}
EOF

1.2.2、添加阿里云YUM软件源

$ cat > /etc/tum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-e17-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/tum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

1.2.3、安装 kubeadm、kubelet 和 kubectl

由于版本更新频繁,这里指定版本安装

$ yum install -y kubelet-1.17.0 kubeadm-1.18.0 kubectl-1.18.0
$ systemctl enable kubelet

1.2.4、部署 kubernetes master

在 master 机器上执行

$ kubeadm init --apiserver-advertise-address=192.168.1.***  --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

--apiserver-advertise-address=192.168.1.*** \  // 当前节点 ip
--kubernetes-version v1.18.0 \ // 当前版本
--service-cidr=10.96.0.0/12 \ //kube-proxy 的 ip  随便定、只要跟当前 ip 不冲突就行
 --pod-network-cidr=10.244.0.0/16 // 每个容器的 ip 随便定、只要跟当前 ip 不冲突就行

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
根据输出提示操作:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown ${id -u}:${id -g} $HOME/.kube/config
$ kubectl get nodes

1.2.5、加入 kubernetes node

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

// 在master机器中获取,执行 2.4 中命令后
$ kubeadm join 192.168.**.**:port --token esce21.q6hetwm8si29qxwn \
    --discovery-token-ca-cert-hash
sha256:0066..................................................

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

$ kubeadm token create --print-join-command

1.2.6、部署 CNI 网络插件

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

默认镜像地址无法访问,sed 命令修改为 docker hub 镜像仓库。

// master 节点
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

// 查看 pod 状态
kubectl get pods -n kube-system
NAME                            READY      STATUS     RESTART     AGE
kube-flannel-ds-amd64-2pc95      1/1       Running       0        72s

1.2.7、测试 kubernetes 集群

在 kubernetes 集群中创建一个 pod,验证是否正常运行

// master 机器
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
// 查看暴露端口号
$ kubectl get pod,svc

访问地址:http://NodeIP:Port

2、基于二进制包方式

步骤:
  • 创建多台虚拟机,安装 linux 操作系统
  • 操作系统初始化(同 1.1、环境准备)
  • 为 etcd 和 apiserver 自签证书
  • 部署 etcd 集群
  • 部署 master 组件(kube-apisever、kube-controller-manager、kube-scheduler、etcd)
  • 部署 node 组件(kubelet、kube-proxy、docker、etcd)
  • 部署网络插件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容