建三台虚拟机,三台虚拟机的信息如下: 注:建议IP地址是自己配的静态地址,因为动态的话改变网络地址就会改变,要重新配置(静态ip配置可参考https://blog.csdn.net/weixin_44764814/article/details/109219132)
hostnameIP地址节点角色CPUmemorymaster172.16.10.102master>=2c>=2Gnode1172.16.10.103node>=2c>=2Gnode2172.16.10.105node>=2c>=2G1.设置主机名
(1)第一台虚拟机master
hostnamectl set-hostname master输入bash生效
bash(2)第二台虚拟机
hostnamectl set-hostname node1 bash(3)第二台虚拟机
hostnamectl set-hostname node2 bash2.下面是三台虚拟机需要同时部署环境,建议使用MobaXterm工具同时部署可以节省许多时间(MobaXterm使用可参考https://blog.csdn.net/weixin_44764814/article/details/109219881)
(1)编辑 /etc/hosts 文件,添加域名解析
vi /etc/hosts添加域名解析
cat <<EOF >>/etc/hosts 172.16.10.102 master 172.16.10.103 node1 172.16.10.105 node2 EOF在其中一台虚拟机用
ping 名称查看是否配置成功 显示如下即配置成功
(2)关闭防火墙、selinux 和 swap:
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab(3)配置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system(4)配置国内 yum 源:
yum update -y yum install -y wget dnf mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo yum clean all && yum makecache(5)配置国内 Kubernetes 源
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/yumkey.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpmpackage-key.gpg EOF(6)配置 Docker 源:
wget https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo(7)安装 Docker:
# 安装最新的版 yum install -y docker-ce systemctl enable docker && systemctl start docker # 查看是否安装成功 docker –version(8)更换 docker 镜像仓库源 首先登陆阿里云官网,没有注册先注册,然后选择控制台->找到容器镜像服务
然后选择镜像加速器,复制镜像加速地址
创建下面的文件,并将镜像加速地址写入
mkdir -p /etc/docker注:https://7oj3jg2x.mirror.aliyuncs.com"], "iptables是自己的镜像加速地址
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://7oj3jg2x.mirror.aliyuncs.com"], "iptables": false, "exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl daemon-reload systemctl restart docker(9)安装 kubeadm、kubelet、kubectl:
#安装 k8s1.18版本 yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl1.18.0 systemctl enable kubelet至此,三台虚拟机共同的环境部署完成
3.部署master节点(第一台虚拟机) (1)创建 Kubernetes 集群并进行初始化:
kubeadm init \ --apiserver-advertise-address=172.16.10.102 \ --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 集群通告地址(即自己虚拟机ip) –image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问, 这里指定阿里云镜像仓库地址。 –kubernetes-version K8s版本,与上面安装的一致 –service-cidr 集群内部虚拟网络,Pod统一访问入口 –pod-network-cidr Pod 网络,与下面部署的CNI网络组件yaml中保持一致
结果如下:
注:记住最后一个,在 Node 节点安装的时候需要使用
(2)拷贝kubectl使用的连接k8s认证文件到默认路径:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config(3)为了使用更便捷,启用 kubectl 命令的自动补全功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master NotReady master 2m v1.18.0查看已经运行的 Pod:
kubectl get pod -n kube-system -owide(会发现除了coredns 未 ready,这是正常的,因为还没有网络插件,接 下来安装相关的网络插件后就变为正常 running 了。) (4)部署 calico 网络:
wget https://docs.projectcalico.org/v3.10/gettingstarted/kubernetes/installation/hosted/kubernetesdatastore/calico-networking/1.7/calico.yaml kubectl apply -f calico.yaml再查看,所有 pod 都运行了: 4. 部署 Node 节点 将 Node 从 Cluster 中删除再加入 从 Master 中删除:
kubectl drain node1 --delete-local-data --force --ignoredaemonsets kubectl delete node node1到待删除 Node 上执行:
kubeadm reset在各个 Node 节点上使用部署 Master 节点中生成的 join 命令,加入到 Cluster中
kubeadm join 172.16.10.102:6443 --token sjh9yp.ilfjgbllllx7vpl6 \ --discovery-token-ca-cert-hash sha256:148a57682936cf0c3cf48f4b86f2f3c5c9ba51c6d8c9c00102321993389458cc结果如下: 5.集群状态监测 待 Node 都加入 Cluster 之后,在 Master 上执行以下命令监测 Cluster 状态是否正常
kubectl get nodes重点查看STATUS内容为Ready时,则说明集群状态正常。 (2)查看集群当前所运行的所有 Pod:
kubectl get pods --all-namespaces