一、系统准备
1、环境
3台centos 7 ,1台master2台Node节点,生成环境一般3台master和N台Node节点。
cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
2、修改主机名
hostnamectl set-hostname master hostnamectl set-hostname node-1 hostnamectl set-hostname node-2
3、安装docker
参考:https://www.cnblogs.com/fanxp/p/11997680.html
4、设置
# 关闭SElinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭防火墙 systemctl disable --now firewalld # 关闭swap swapoff -a && sysctl -w vm.swappiness=0 # 取消开机挂载swap sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab # 解决路由异常问题 yum install -y bridge-utils.x86_64 # 加载br_netfilter模块,使用lsmod查看开启的模块 modprobe br_netfilter cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # 重新加载所有配置文件 sysctl --system
二、安装kubelet kubeadm kubectl
1、设置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [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 EOF
2、安装
# 查询可用版本
yum list --showduplicates | grep 'kubeadm|kubectl|kubelet'
# 这里默认安装最新版本(v1.17.0)
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 设置开启启动并启动kubelet
systemctl enable kubelet && systemctl start kubelet
3、master
拉取镜像
# 拉取集群所需镜像,这个需要FQ kubeadm config images pull # 不能FQ用下面方法 kubeadm config images list # 用其它地址拉起然后用tag修改 docker pull gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0 docker pull gcr.azk8s.cn/google-containers/kube-controller-manager:v1.17.0 docker pull gcr.azk8s.cn/google-containers/kube-scheduler:v1.17.0 docker pull gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 docker pull gcr.azk8s.cn/google-containers/pause:3.1 docker pull gcr.azk8s.cn/google-containers/etcd:3.4.3-0 docker pull gcr.azk8s.cn/google-containers/coredns:1.6.5 # 修改tag docker tag gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0 k8s.gcr.io/kube-apiserver:v1.17.0 docker tag gcr.azk8s.cn/google-containers/kube-controller-manager:v1.17.0 k8s.gcr.io/kube-controller-manager:v1.17.0 docker tag gcr.azk8s.cn/google-containers/kube-scheduler:v1.17.0 k8s.gcr.io/kube-scheduler:v1.17.0 docker tag gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 k8s.gcr.io/kube-proxy:v1.17.0 docker tag gcr.azk8s.cn/google-containers/pause:3.1 k8s.gcr.io/pause:3.1 docker tag gcr.azk8s.cn/google-containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0 docker tag gcr.azk8s.cn/google-containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5 # 删除原镜像 docker rmi gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0 docker rmi gcr.azk8s.cn/google-containers/kube-controller-manager:v1.17.0 docker rmi gcr.azk8s.cn/google-containers/kube-scheduler:v1.17.0 docker rmi gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 docker rmi gcr.azk8s.cn/google-containers/pause:3.1 docker rmi gcr.azk8s.cn/google-containers/etcd:3.4.3-0 docker rmi gcr.azk8s.cn/google-containers/coredns:1.6.5
初始化
kubeadm init --apiserver-advertise-address 192.168.1.221 --pod-network-cidr 10.244.0.0/16
--apiserver-advertise-address API Server将要广播的监听地址。如指定为 `0.0.0.0` 将使用缺省的网卡地址。
--pod-network-cidr=10.244.0.0/16 指明pod网络可以使用的IP地址段。 如果设置了这个参数,control plane将会为每一个节点自动分配CIDRs。
用户设置权限
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4、node
拉取镜像
#拉取 docker pull gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 docker pull gcr.azk8s.cn/google-containers/pause:3.1 #修改tag docker tag gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 k8s.gcr.io/kube-proxy:v1.17.0 docker tag gcr.azk8s.cn/google-containers/pause:3.1 k8s.gcr.io/pause:3.1 #删除原镜像 docker rmi gcr.azk8s.cn/google-containers/kube-proxy:v1.17.0 docker rmi gcr.azk8s.cn/google-containers/pause:3.1
添加节点
kubeadm join 192.168.1.221:6443 --token pt7x4v.5hz02ixc3ymt26az --discovery-token-ca-cert-hash sha256:5104ec0c1da36ff56fe2592ac53e7ee2ba3247da4d9582ae49457ce6747fcf27
5、查看节点状态
在master中执行
kubectl get nodes
node节点状态处于 NotReady,可以查看pod是否运行正常
kubectl get pod --all-namespaces
通过 kubectl describe pod <Pod Name> 查看 Pod 的具体情况
kubectl describe pod kube-flannel-ds-amd64-4l92d --namespace=kube-system
通过这里可以看到,node节点正在拉取quay.io/coreos/flannel:v0.11.0-amd64镜像,可以多等一会,node节点拉取完镜像kubernetes会自动重试
如果一直没有成功,可以通过下面命令查看是在哪个节点,直接去node节点机器手动执行docker pull下载镜像
kubectl get pod -o wide --all-namespaces
最终效果