Linux安装k8s
作者QQ:67065435 QQ群:669756510
本站内容全部为作者原创,转载请注明出处!
开始安装
事先声明
假设192.168.1.72为主机master的局域网IP 假设192.168.1.235为主机node01的局域网IP声明主机名称(master)
hostnamectl set-hostname master echo "192.168.1.72 master" >> /etc/hosts echo "192.168.1.235 node01" >> /etc/hosts声明主机名称(node01)
hostnamectl set-hostname node01 echo "192.168.1.72 master" >> /etc/hosts echo "192.168.1.235 node01" >> /etc/hosts局域网端口互通(开发环境)
# 局域网完全互通(都执行) firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/16 firewall-cmd --permanent --zone=internal --add-port=0-65535/tcp firewall-cmd --permanent --zone=internal --add-port=0-65535/udp firewall-cmd --reload # 公网部分开放(master) firewall-cmd --permanent --zone=public --add-port=6443/tcp firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp firewall-cmd --reload开启防火墙端口(生产环境)
# 局域网(master) firewall-cmd --permanent --zone=internal --add-port=2379/tcp firewall-cmd --permanent --zone=internal --add-port=2380/tcp firewall-cmd --permanent --zone=internal --add-port=10250/tcp firewall-cmd --permanent --zone=internal --add-port=10259/tcp firewall-cmd --permanent --zone=internal --add-port=10257/tcp firewall-cmd --permanent --zone=internal --add-port=6443/tcp firewall-cmd --permanent --zone=internal --add-port=30000-32767/tcp firewall-cmd --reload # 局域网(node01) firewall-cmd --permanent --zone=internal --add-port=8472/udp firewall-cmd --permanent --zone=internal --add-port=10250/tcp firewall-cmd --permanent --zone=internal --add-port=10255/tcp firewall-cmd --permanent --zone=internal --add-port=30000-32767/tcp firewall-cmd --reload关闭SELinux(都执行)
setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config getenforce关闭swap(都执行)
swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab配置内核参数(都执行)
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system添加k8s源(都执行)
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/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum clean all yum makecache安装kubelet、kubeadm、kubectl(都执行)
# 指定版本是为了保证系统稳定性 # disableexcludes: 禁用这些包的更新 yum -y --nogpgcheck install kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15 --disableexcludes=kubernetes systemctl enable kubelet systemctl start kubelet初始化(master)
kubeadm init \ --apiserver-advertise-address=192.168.1.72 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --kubernetes-version v1.20.15 \ --control-plane-endpoint="192.168.1.72:6443" \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --upload-certs # 备选--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers registry.aliyuncs.com/google_containers docker.io/googlecontainers # 初始化成功后,会输出类似以下信息,妥善保存: # kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \ # --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx配置kubectl(master)
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=$HOME/.kube/config echo "export KUBECONFIG=/root/.kube/config" >> ~/.bash_profile source ~/.bash_profile安装Flannel网络插件(master)
# 从本文下载 wget https://n.so1234.top/1centos/Docker/kube-flannel.yml -O /etc/kubernetes/manifests/kube-flannel.yml # 从官方下载 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O /etc/kubernetes/manifests/kube-flannel.yml kubectl apply -f /etc/kubernetes/manifests/kube-flannel.yml挂载节点(node01)
# 执行前面记下的join命令 kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx如前面未记下命令,重新生成token(master)
# 生成新的token kubeadm token create # 获取 discovery-token-ca-cert-hash openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' # 组合成完整的join命令 echo "kubeadm join 192.168.1.72:6443 --token $(kubeadm token create) --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //')" # 执行成功后,会输出类似以下信息,重新在node01执行: kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx查看状态(master)
# 查看集群信息 kubectl cluster-info kubectl get componentstatuses # 查看节点状态 kubectl get nodes kubectl describe node 节点名称 # 查看所有pod状态 kubectl get pods -A # 查看所有服务状态 kubectl get services -A
问题排查
kubelet启动失败
# 查看 kubelet 状态 systemctl status kubelet # 查看 kubelet 日志 journalctl -xeu kubeletPod一直处于Pending状态
# 查看Pod详情 kubectl describe pod <pod-name> # 查看节点资源情况 kubectl describe node <node-name>网络插件故障
# 重装Flannel kubectl delete -f /etc/kubernetes/manifests/kube-flannel.yml kubectl apply -f /etc/kubernetes/manifests/kube-flannel.yml