- 前言
- 1.最好是手动
- 2.Docker安装
- 3.K8S
- **在`kubeadm init` 之前kubelet会不断重启**
- 总结
前言 1.最好是手动 2.Docker安装
# 安装依赖软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker repository,这里使用国内阿里云yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装docker-ce,这里直接安装最新版本 yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 #修改docker配置文件 mkdir /etc/docker cat > /etc/docker/daemon.json < yum remove -y docker* rm -rf /etc/systemd/system/docker.service.d rm -rf /var/lib/docker rm -rf /var/run/docker3.K8S准备三台2核4G的虚拟机(内存至少2G以上)
#1、关闭防火墙 systemctl stop firewalld systemctl disable firewalld #2、关闭 selinux sed ‐i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭 setenforce 0 # 临时关闭 #3、关闭 swap swapoff ‐a # 临时关闭 vim /etc/fstab # 永久关闭 #注释掉swap这行 # /dev/mapper/centos‐swap swap swap defaults 0 0 systemctl reboot #重启生效 free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功 #4、给三台机器分别设置主机名 hostnamectl set‐hostname第一台:k8s‐master 第二台:k8s‐node1 第三台:k8s‐node2 hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2 #5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip cat >> /etc/hosts << EOF 192.168.79.141 k8s‐master 192.168.79.142 k8s‐node1 192.168.79.143 k8s‐node2 EOF #6、将桥接的IPv4流量传递到iptables cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge‐nf‐call‐ip6tables = 1 net.bridge.bridge‐nf‐call‐iptables = 1 EOF sysctl --system # 生效 这个也要同时执行,每次重新启动 #7、设置时间同步 , 这个要特别小心,同时执行 yum install ntpdate -y ntpdate time.windows.com #8、添加k8s yum源 cat>/etc/yum.repos.d/kubernetes.repo< 在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)
kubeadm reset
在kubeadm init 之前kubelet会不断重启
#yrm -rf /var/lib/etcd #删除污点 rm -rf /var/lib/kubelet/cpu_manager_state kubeadm init --apiserver-advertise-address=192.168.79.141 --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#代表初始化成功 Your Kubernetes control-plane has initialized successfully! #这段命令需要在master执行下 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #config要注意啦 sudo chown $(id -u):$(id -g) $HOME/.kube/config #kubectl get nodes #这段命令需要在所有node节点上执行 kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l --discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894在k8s-master机器上执行如下命令:
#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令 mkdir -p $HOME/.kube#把原来创建的删掉 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config #查看kubectl是否能正常使用 kubectl get nodes #Ready #安装 Pod 网络插件 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml # 如果上面这个calico网络插件安装不成功可以试下下面这个 # kubectl apply ‐f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kubeflannel.yml在所有k8s node机器执行上图第三个红框里的命令
kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l --discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894报错处理方法,其实主要是master机器的内存性能问题比较大,
尝试下将master的交换分区打开swapon -a,然后等完成上面的操作后,将master的交换分区关闭swapoff -a
rm -rf /etc/kubernetes/* netstat -nltp|grep 10250 systemctl restart kubelet netstat -nltp|grep 10250 tail /var/log/messages journalctl -xeu kubelet kubeadm token list出现如上问题的主要原因是之前 kubeadm init 初始化过,所以一些配置文件及服务均已存在,重新执行 kubeadm join 时必然
会导致冲突,解决方法如下:kubeadm reset rm -rf /etc/kubernetes/* rm -rf $HOME/.kube/config rm -rf /var/lib/etcd #初始化 kubeadm init --apiserver-advertise-address=192.168.79.141 --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 #配置 mkdir -p $HOME/.kube #把原来创建的删掉 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config rm -rf /etc/kubernetes/* systemctl restart kubelet kubectl delete node k8s-master systemctl status kubelet systemctl start kubelet kubeadm join 192.168.79.141:6443 --token jya5qv.rtbtwjmcwmxuek5l --discovery-token-ca-cert-hash sha256:6490ce59854c187222b049884f2585ad79a56be07a29cb17649382acd4c04894 # kubeadm token generate需要等待一段时间,才能Ready
在k8s-master机器执行查看节点命令
kubectl get nodes刚刚安装的三个k8s节点都已经准备就绪,大功告成!
如果出现Not Ready,那么node
journalctl -u kubelet >> kubelet.log systemctl daemon-reload systemctl restart kubelet三个节点必须都为Ready
用K8S部署Nginx
在k8s-master机器上执行# 创建一次deployment部署 kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort # 查看Nginx的pod和service信息 kubectl get pod,svc -o wideservice/nginx NodePort 10.96.131.9880:30299/TCP 29s app=nginx http://192.168.79.141:30299/补充:如果node节点添加进集群失败,可以删除节点重新添加
要删除 k8snode1 这个节点,首先在 master 节点上依次执行以下两个命令kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets kubectl delete node k8s-node1执行后通过 kubectl get node 命令可以看到 k8snode1 已被成功删除
接着在 k8snode1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执
行命令添加到集群kubeadm reset
总结



