准备环境
1.硬件要求:2核CPU 以上 2G内存以上 硬盘默认20G便可
2.准备3台虚拟机,我们这里使用VmWare软件来虚拟3台机器
3.机器需要能访问外网
4.3台机器已经安装好docker,可根据文章docker安装进行操作。
这里我以10.85.69 网段为例,你可以根据你的网络情况改成自己的IP地址
角色 | IP |
---|---|
master | 10.85.69.100 |
node1 | 10.85.69.101 |
node2 | 10.85.69.102 |
linux环境设置
3台机器都要执行以下命令
#禁用防火墙
systemctl stop firewalld
#开机启动禁用防火墙
systemctl disable firewalld
#关闭selinux(关闭linux默认的安全策略,不关闭会修改/etc/selinux/config的内容)
sed -i 's/enforcing/disabled/' /etc/selinux/config
#把当前会话的默认安全策略也禁掉(或者重启虚拟机应该也可,我是这样理解的)
setenforce 0
#关闭swap(关闭内存交换)(开启内存交换的话,性能会出现很大的问题)
#临时的,只针对当前会话起作用,若会话关闭,重开还是会开启内存交换,所以使用下面一行命令即可
swapoff -a
#永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# free -g 验证,swap必须为0;
#添加主机名与IP对应关系(注意:主机名一定不能是localhost,如果是,使用下面命令修改主机名)
vi /etc/hosts
10.85.69.100 master
10.85.69.101 node1
10.85.69.102 node2
#查看主机名命令
hostname
#修改主机名命令
sudo hostnamectl set-hostname <newhostname>
#将桥接的IPv4流量传递到iptables的链
#(如果不执行可能会有些流量统计指标的消失,为了让更精确的统计流量,所以执行此命令)
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
# 让系统应用此规则
sysctl --system
# 配置安装源
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=0
EOF
#执行该命令
yum check-update
主节点安装
#指定版本安装
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
#设置kubelet开机自启动,并且启动kubelet
systemctl enable kubelet && systemctl start kubelet
#分别是kubernetes版本,apiserver的地址,需要设置为主节点ip,阿里云镜像仓库,service网络,pod网络
#pod网络建议使用10.244.0.0,因为后续安装flannel默认的网段是10.244.0.0
kubeadm init \
--kubernetes-version v1.20.6 \
--apiserver-advertise-address=10.85.69.100 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
#kubeadm安装成功后执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#保存kubeadm join 命令,这是子节点加入集群的关键
子节点安装
#不需要安装kubectl
yum install -y kubelet-1.20.6 kubeadm-1.20.6
#设置kubelet开机自启动,并且启动kubelet
systemctl enable kubelet && systemctl start kubelet
#将保存的kubeadm join命令粘贴执行,将子节点加入到集群中
kubeadm join xxx
主节点安装网络插件
根据命令 kubectl get nodes 查看节点信息
根据命令 kubectl describe node master 查看节点详情,可以看到node状态为NotReady的原因为未安装网络插件
# 创建yml文件的存放目录
mkdir -p /app/kube/yam && cd /app/kube/yam
#获取flannel的yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#安装flannel插件
kubectl apply -f kube-flannel.yml
若存在先安装calico网络插件不成功,再删除 换成 flannel 插件,pod没有正常启动的情况,则删除掉 /etc/cni/net.d/ 目录下的 calico 配置文件即可,再查看pod应该就能正常启动。
主节点安装dashboard
--安装dashbord
#下载yml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
#仿照下方图片进行编辑
vim recommended.yaml
#运行yml文件创建dashboard
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
# 此处主要是增加dashboard角色权限,原始的权限太小
# 创建dashboard-admin.yaml文件
vim dashboard-admin.yaml
#dashboard-admin.yaml内容为
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: dashboard-admin
namespace: kubernetes-dashboard
#华丽的分隔符************************************************
#执行创建管理员
kubectl applay-f dashboard-admin.yaml
# 创建dashboard-admin-bind-cluster-role.yaml文件
vim dashboard-admin-bind-cluster-role.yaml
#dashboard-admin-bind-cluster-role.yml内容为
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-bind-cluster-role
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
#华丽的分隔符************************************************
#执行分配权限
kubectl create -f dashboard-admin-bind-cluster-role.yaml
#查看并复制用户Token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')
网页请求https://nodeIp:30000/,输入复制的 token 信息,即可登录dashboard.