系统配置:
cpu和内存:master推荐 4c16g,最低2c4g;node推荐4c16g甚至更高,根据实际运行的容器数量调整。
linux操作系统:推荐Red Hat Linux 7或者CentOS7
etcd:3.0版本以上。推荐3.3版本。
docker: 18.03版本以上。docker安装
防火墙:
如果是阿里云,同一内网可以直接互相访问,不考虑配置。
如果是私有部署,需要手动关闭防火墙。
systemctl disable firewalld
systemctl stop firewalld
禁用主机SELinux,让容器可以读取主机文件系统:
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
配置k8s国内yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装k8s工具组件:
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
拉取k8s需要的镜像:
查看k8s需要的镜像列表:kubeadm config images list
获得k8s初始化参数模板:kubeadm config print init-defaults > init.defaults.yml
根据默认配置,做一个配置用于拉依赖镜像:
cp init.defaults.yml init-config-images.yml
vim init-config-images.ymlapiVersion: kubeadm.k8s.io/v1beta2
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.21.0拉取镜像到本地:kubeadm config images pull --config=init-config-images.yml
执行过程中发现coredns/coredns没拉取成功,于是手动从docker pull 一个:
docker pull coredns/coredns把镜像改名,符合执行要求
docker tag coredns/coredns:latest registry.aliyuncs.com/google_containers/coredns:v1.8.0
至此,准备工作完成
安装master节点
首先创建默认配置文件:
kubeadm config print init-defaults > init.yml
需要修改以下几个地方:
advertiseAddress改为当前内网ip,用于向集群其他节点广播当前节点地址。
name改为当前系统hostname
imageRepository改为阿里云镜像源,默认的墙外地址是无法访问的。
额外追加podSubnet值为自定义的一个网段,表示集群的pod地址必须从此网段分配。这个网段与后面的cni插件的默认配置也是一致的。保存配置,开始部署
kubeadm init --config=init.yml
看到以上信息代表master节点部署成功。
注意保存最后一句,用来把node节点加入集群。
随后需要根据说明,复制配置文件到指定目录。
查看当前节点
kubectl get node
安装node节点
准备工作同master节点。
创建node节点的配置文件:kubeadm config print join-defaults > init-node.yml
修改文件配置:
apiServerEndpoint值为master节点内网ip
token和tlsBootstrapToken为master节点配置的token保存配置,执行命令安装node节点:
kubeadm join --config=init-node.yml
切换到master节点再执行kubectl get nodes
除了上述方法,还可以直接执行之前保存的join命令直接加入。
至此,node节点安装完毕。
我们会发现,节点的状态全部都是NotReady,这是因为还没有安装网络插件,通常我们都会使用CNI插件。
安装cni之flannel
首先需要到github上下载flannel的配置文件:
https://github.com/flannel-io/flannel/tree/master/Documentation/k8s-manifests
复制kube-flannel-legacy.yml和kube-flannel-rbac.yml到本地修改kube-flannel-rabc.yml
因为安装的k8s的api版本比较新,这里修改apiVersion。
否则会报如下信息:
如果报这个需要先执行kubectl delete -f kube-flannel-rbac.yml 用之前的配置删除flannel修改kube-flannel-legacy.yml
这里追加了tolerations配置,这是关于pod节点亲和性的设置,Toleration设置为可以容忍具有Taint(污点)的Node,使得pod能够被调度到该node上。
同时注意到默认的网段配置为10.244.0.0/16,与之前的pod网络配置一致。
因为安装的k8s的api版本比较新,这里修改apiVersion并添加selector标签。
不修改apiVersion会报如下信息:
如果报这个需要先执行kubectl delete -f kube-flannel-legacy.yml 用之前的配置删除flannel不添加selector标签会报如下信息:
网上查找该问题摘要:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
如果报这个同样需要执行kubectl delete -f kube-flannel-legacy.yml 用之前的配置删除flannel开始安装flannel
Create the clusterrole and clusterrolebinding:
kubectl create -f kube-flannel-rbac.yml --kubeconfig /etc/kubernetes/admin.conf
Create the pod using the same namespace used by the flannel serviceaccount:
kubectl create -f kube-flannel-legacy.yml --kubeconfig /etc/kubernetes/admin.conf
查看nodes:
至此,flannel安装完毕。
网友评论