至少准备三台centos服务器,其中一台为master节点,两台work节点;centos系统版本为7.5或以上版本;我这里使用的是7.9,除此之外,还需要一些额外的条件
*.每台主机至少具备2G内存;2核CPU
*.一定关闭防火墙
k8s要求集群中的节点必须精确一致,所以直接使用chronyd从网络同步时间
# 启动chronyd服务
systemctl start chronyd
# 设为开机自启
systemctl enable chronyd
# 查看当前时间
date
*这里有重要的一步,请记住自己master和node之间通信的ip,如我的master的ip为172.26.39.191,node的ip为:172.26.39.192. 请确保使用这两个ip在master和node上能互相ping通,这个master的ip 172.26.39.191接下来配置k8s的时候需要用到。
# 主节点
hostnamectl set-hostname master
# 工作节点1
hostnamectl set-hostname node1
# 工作节点2
hostnamectl set-hostname node2
$ vi /etc/hosts
添加如下内容:
192.26.39.191 master
192.26.39.192 node1
192.26.39.192 node2
systemctl stop firewalld
systemctl disable firewalld
# 临时禁用,重启后复原,也可以用 setenforce Permissive 命令,效果是一样的
setenforce 0
# 永久禁用,
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#临时关闭swap分区, 重启失效;
swapoff -a
#永久关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
cat < br_netfilter EOF cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF [root@master ~]# sysctl --system 在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块 安装ipset和ipvsadm sudo yum install -y yum-utils [root@master ~]# yum install ipset ipvsadmin -y 2.添加需要加载的模块写入脚本文件 [root@master ~]# cat < #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF 3.为脚本添加执行权限 [root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules 4.执行脚本文件 [root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules 5.查看对应的模块是否加载成功 [root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4 # 查看已安装的docker yum list installed | grep docker # 卸载docker相关组件 yum -y remove docker* # 除了docker之外,也需要将containerd.io 卸载,这是容器相关的组件 docker -y remove containerd.io.x86_64 # 删除docker目录 rm -rf /var/lib/docker # 使用国内的阿里云镜像仓库-- 比较快 ,建议使用这个 [root@master ~]# yum-config-manager --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 出现 问题解决:这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了 安装19.03.13以下的,版本太高,后期会出现kubeadm不兼容的的问题 [root@master ~]# yum install \ docker-ce-19.03.2 docker-ce-cli-19.03.2 containerd.io-1.4.4 -y docker在默认情况下使用Cgroup Driver 为cgroupfs, 而k8s推荐使用systemd来代替cgroupfs, 所以在/etc/docker/daemon.json内加入以下内容,如果没有这个文件,手动创建一个 vi /etc/docker/daemon.json { "registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } 报错: 解决方案: cd /etc mkdir docker cd docker vi daemon.json # 第一种:启动docker systemctl start docker # 第二种:启动docker并设为开机启动 systemctl enable docker --now #查看docker版本 docker -v docker version docker --version cat < [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF 指定版本 yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 --disableexcludes=kubernetes 最新版本 yum install -y kubelet kubeadm kubectl 在 /etc/sysconfig/kubelet 文件中加入以下内容、 vi /etc/sysconfig/kubelet KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" # 开机自动启动 systemctl enable --now kubelet 初始化主节点之前,需要先下载一些组件,但是这些组件都在官网上,所以我们国内是无法下载的,所以一我们将官网的镜像改成阿里云的镜像,以下命令执行后会在当前目录得到一个 images.sh 的脚本文件,执行后会在docker中下载一些需要的组件,理论上这些只需要在主节点上执行,但是为了保险起见,我们在所有节点都安装一下 sudo tee ./images.sh <<-'EOF' #!/bin/bash images=( kube-apiserver:v1.23.1 kube-proxy:v1.23.1 kube-controller-manager:v1.23.1 kube-scheduler:v1.23.1 coredns:1.7.5 etcd:3.4.13-0 pause:3.2 kubernetes-dashboard-amd64:v1.10.0 heapster-amd64:v1.5.4 heapster-grafana-amd64:v5.0.4 heapster-influxdb-amd64:v1.5.2 pause-amd64:3.1 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName done EOF 设置可执行权限并执行脚本 chmod +x ./images.sh && ./images.sh kubeadm init \ --apiserver-advertise-address=172.26.38.191 \ --control-plane-endpoint=master \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.1 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 安装过程需等待几分钟 这样就算成功了 查看镜像 根据上面的提示继续进行配置,如果需要使用集群,还需要执行以下命令, 记住,这里的命令是从第一步初始化成功后拷贝过来的命令,应该拷贝你的命令来执行 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 下面就可以直接使用kubectl命令了 kubectl get node 1、下载 curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml 2、查看是否部署成功 kubectl get pods -n kube-system 再次查看node,可以看到状态为ready 如果安装失败,执行下面的命令 kubeadm reset rm -rf $HOME/.kube 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令: 复制上面命令,在node节点上执行 [root@master ~]# kubeadm join 172.26.38.191:6443 --token xrkax8.7izalcr2y9ggf5ph \ --discovery-token-ca-cert-hash sha256:d8167c9353369f476016f75ba176b3ff6b5e7ef57e614bcf581caa368082122d 出现了这个问题,若无,请忽略,进行下一步 解决:删除残留文件 rm -f /etc/kubernetes/kubelet.conf #删除k8s配置文件 rm -f /etc/kubernetes/pki/ca.crt #删除K8S证书 端口占用提示:[ERROR Port-10250]: Port 10250 is in use 解决:查看占用进程,然后杀掉,然后再加入 sudo yum install -y net-tools -q #安装相关工具(-q:静默安装) 然后在查看端口 netstat -ntpl | grep 10250 可以看出,是K8S占用了,那就尝试重启服务看看能不能解决 systemctl restart kubelet 再次查看端口就没有了 最后再次执行 kubeadm join................. 执行成功 如果token忘记了,则可以通过如下操作: 1)查看token,如果token失效,则重新生成一个 $ kubeadm token list $ kubeadm token create 2)获取ca证书sha256编码hash值 $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' kubernetes官方提供的可视化界面 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard type: ClusterIP 改为 type: NodePort kubectl get svc -A |grep kubernetes-dashboard 找到端口,在安全组放行 访问: https://集群任意IP:端口 https://120.27.139.90:30051 #创建访问账号,准备一个yaml文件; vi dash.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard 然后执行 kubectl apply -f dash.yaml #获取访问令牌 kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}" 然后写入到token里面 后面会继续发布k8s自动化部署项目的文章7、配置ipvs功能
二、安装docker
1、卸载原docker
2、使用国内的阿里云镜像仓
3、安装指定版本的docker
4、使用systemd代替cgroupfs、以及配置仓库镜像地址
“/etc/docker/daemon.json” E212: Can’t open file for writing
5、启动docker
安装k8s
1、添加阿里云YUM软件源
2、EOF安装kubeadm,kubelet和kubectl
3、添加配置
4、启动kubelet
5、使用kubeadm引导集群
四.部署Kubernetes Master
1、初始化主节点
2、初始化后续
3、安装插件
五、work节点加入集群
六、部署dashboard
1、部署
2、设置访问端口
3、创建访问账号
4、令牌访问
5、界面