首先需要准备3台或者3台以上电脑(虚拟机物理机均可),安装centos8配置ip地址在同一网段;注意:虚拟机需要配置2个cpu,不然会报错
例如:
1、各个节点(安装centos8的电脑)配置主机名,为了可以相互找到对方
在192.168.3.55(master--主节点||控制节点)主机上执行下面代码
在192.168.3.56(工作节点)主机上执行下面代码
在192.168.3.57(工作节点)主机上执行下面代码
在192.168.3.58(工作节点)主机上执行下面代码
2、配置hosts解析(类似配置域名解析,hosts仅限本机解析)
通过下面命令修改/etc/hosts文件
vi /etc/hosts
增加下面内容
3、关闭selinux
4、关闭swap(虚拟内存)
如果不关闭kubernetes运行会出现错误, 即使安装成功了,node重启后也会出现kubernetes server运行错误
暂时关闭,执行下面命令
永久关闭,需修改/etc/fstab文件
通过下面命令修改/etc/fstab文件
vi /etc/fstab
#/dev/mapper/cl-swap swap swap defaults 0 0
在/dev/mapper/cl-swap前面加上#注释,上面已经加上注释了
5、配置内核参数,将桥接的IPv4流量传递到iptables的链
执行下面命令
6、配置centos8阿里云yum源
7、安装docker
- 配置阿里云yum源
执行下面命令
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 安装containerd.io
执行下面命令
dnf install -y https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.8-3.1.el8.x86_64.rpm - 安装docker-ce
执行下面命令
dnf install -y docker-ce - 配置docker镜像加速,并且设置docker的cgroupdriver为systemd
执行下面命令
mkdir -p /etc/dockercat > /etc/docker/daemon.json <<EOF{"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]}EOF - 启动docker服务
systemctl enable --now docker
到目前为止docker已经安装并运行;如果是虚拟机建议进行快照或者备份虚拟机。
8、安装kubernetes(k8s)的kubectl、kubelet、kubeadm
- 添加kubernetes源
阿里源(推荐)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg \https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpgEOF - 开始安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes - 启用k8s服务
systemctl enable --now kubelet
systemctl enable kubelet - 配置防火墙
master(主节点||控制节点)
协议 方向 端口范围 作用 使用者
TCP 入站 6443 Kubernetes API 服务器 所有组件
TCP 入站 2379-2380 etcd 服务器客户端 API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 10251 kube-scheduler kube-scheduler 自身
TCP 入站 10252 kube-controller-manager kube-controller-manager 自身
master节点通过端口6443、2379-2380、10250、10251、10252
在主节点或控制节点执行下面命令
firewall-cmd --add-port=6443/tcp --permanentfirewall-cmd --add-port=2379/tcp --permanentfirewall-cmd --add-port=2380/tcp --permanentfirewall-cmd --add-port=10250/tcp --permanentfirewall-cmd --add-port=10251/tcp --permanentfirewall-cmd --add-port=10252/tcp --permanentfirewall-cmd --add-port=30000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
worker节点通过端口10250、30000-32767
协议 方向 端口范围 作用 使用者
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 30000-32767 NodePort 服务 所有组件
在工作节点执行下面命令
firewall-cmd --add-port=10250/tcp --permanentfirewall-cmd --add-port=30000-32767/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all - 下载所需的镜像
查询需要下载的镜像,执行下面命令
kubeadm config images list
docker images
注意:对应的版本号要与kubeadm config images list返回列表中镜像版本号一致(执行下面命令)
例如:k8s.gcr.io/kube-apiserver:v1.22.1 改下docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.1;后面v1.22.1就是版本号(发布新版本后会变更)
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.1docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.1docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.1docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.22.1docker pull registry.aliyuncs.com/google_containers/pause:3.5docker pull registry.aliyuncs.com/google_containers/etcd:3.5.0-0
docker pull coredns/coredns:1.8.4
上面拉取代理仓库中的镜像(会需要一段时间),再打个tag即可 docker tag regsitry.image:tag image:tag
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.1 k8s.gcr.io/kube-apiserver:v1.22.1docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.1 k8s.gcr.io/kube-controller-manager:v1.22.1docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.1 k8s.gcr.io/kube-scheduler:v1.22.1docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.22.1 k8s.gcr.io/kube-proxy:v1.22.1docker tag registry.aliyuncs.com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5docker tag registry.aliyuncs.com/google_containers/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
docker tag coredns/coredns:1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4
kubeadm config images pull
在各个节点执行上面所有操作,1和8.4中的按照描述在不同的节点执行不同的命令
9、(主节点)初始化k8s集群
执行下面命令
注意:虚拟机需要配置2个cpu,不然会报错
如果执行kubeadm init失败,通过下面命令查看
如果是这种错误failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\",则通过下面两种办法解决
方法1:执行下面命令修改文件k8s配置
找到下这个
cgroupDriver: systemd
修改为
cgroupDriver: cgroupfs
方法2:只修改docker配置文件
修改或创建/etc/docker/daemon.json
重启docker:
通过下面方式查看docker
下面是kubelet重启命令
修改完成后执行下面 进行重置
如果执行kubeadm init成功了,需要记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行
eg:
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.122.21:6443 --token v2r5a4.veazy2xhzetpktfz \
--discovery-token-ca-cert-hash sha256:daded8514c8350f7c238204979039ff9884d5b595ca950ba8bbce80724fd65d4
如果是非root用户,执行下面
如果是root用户,执行下面
下这个命令每次登录都需要执行
可加入到~/.bash_profile文件中,执行下面命令
查看节点,pod
node节点为NotReady,因为corednspod没有启动,缺少网络pod
安装calico或者flannel网络,选择一种即可
安装calico网络
安装flannel网络
如果yml中的"Network": "10.244.0.0/16"和kubeadm init xxx --pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。
如果需要修改,则通过下面方式下载再修改
或者
修改vi kube-flannel.yml保存后再执行下面命令即可
由于上面的kubeadm init xxx --pod-network-cidr就是10.244.0.0/16。所以此yaml文件就不需要更改了
查看pod和node
10、安装kubernetes-dashboard(k8s网页控制台)
官方部署dashboard的服务没使用nodeport,将yaml文件下载到本地,在service里添加nodeport
或者
修改配置文件
下面仅仅列出部分内容
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
新增这个type: NodePort、nodePort: 30000就可以
开始安装
已经安装通过下面命令进行删除(如果需要删除)
如果安装成功,直接访问https://192.168.3.55:30000/
使用 kubectl 命令行工具访问 Dashboard
再在浏览器访问下面链接
http://192.168.3.55:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
使用token进行登录,
创建 token,执行下面命令
授权token 访问权限,执行下面命令
获取token,执行下面命令
获取dashboard.kubeconfig 使用token值
执行后输出下面内容(类似下面内容-每次不一样)
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFGeHJFR0hmM1RWcVRUUElLd3FKaVJkZEFuQWlHcmUtOWZRdHUwX3ctYlEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZGQ4bjciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTFjMjQzZGUtYmUwNi00YjUyLWIzZGMtODdlZTcxOGM2ZjIyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.szwFxJi7LL1YayOYgNo_unSMYXirBnmz8Bvl-1BGAt3Le78rd0sDa3f8vho2mx7lgR46RNZsbk-SyuUxITBq2c0Oov7dvoog6ZfjY5wCR4xC4hmFqQ9Y0tNmcRwHeKZI1ieGepEbctJr2WytlKZgjceyxjoVQJ5j4_1bsR2p9LYdAPuYGkmvGpm-palWuIrWMaO44PGWZcP9aqgKhEWyOaKluvySkxthKVp3OxiXI3UEjnG0kuYTIWrSnhffgjqKjIFz0ndYPUdTo54iUh6tHxfi7pOTsGjBxjrRVG2M09c5kswoCJbOTLsGrLes5LOcAUcQU3dfCt16YgYCEbHvYQ
注意事项:
#kubeadm token 默认时间是24 小时,过期记得从新生成token 然后加入节点
# 查看token
# 创建token
#忘记初始master节点时的node节点加入集群命令怎么办
# 简单方法
# 第二种方法
查看日志
11、worker节点加入集群
加入集群前,先执行部署master节点之前的所有操作
在每个worker节点执行下面命令加入集群(下面命令中的--token、--discovery-token-ca-cert-hash后面的值换成自己的,或者刚刚在主节点生成的命令)
如果执行失败需要重置,执行下面命令
删除一些文件
#如果执行kubeadm init时没有记录下加入集群的命令,可以通过以下命令重新创建(如果没有记录下来,这个是在master节点执行)
到此k8s集群部署完成,感谢您的观看(如有问题,请留言),谢谢。