此处选用centos 7 操作系统进行安装操作。
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
(1) 临时修改主机名
hostname 名字
(2) 添加主机名与IP对应关系(记得设置主机名):
cat /etc/hosts
192.168.28.71 master
192.168.28.72 node1
192.168.28.73 node2
(1)创建 k8s.conf 文件
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
(2)加载br_netfilter模块
modprobe br_netfilter
lsmod | grep br_netfilter
(3)使以上配置生效
sysctl --system
(1)查看时间
timedatectl status
(2)修改区时
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(3)安装工具&手动执行对时
yum -y install ntp ntpdate
ntpdate ntp1.aliyun.com #在线环境可以使用
(1)安装Docker-ce源
yum install -y wget && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
(3)安装Docker-ce
yum -y install docker-ce-20.10.12-3.el7.x86_64
(4)开启自启和启动
systemctl enable docker && systemctl start docker
(5)查看版本
docker --version
kubeadm、kubelet、kubectl 集群所有服务器都安装。
(1)添加阿里云YUM的软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
(2)安装kubeadm、kubelet、kubectl
由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0
(3)设置开机自启
systemctl enable kubelet
(4)清空配置
kubelet reset
(1)初始化master
注意修改apiserver-advertise-address值为master的ip。
另外建议将此条命令单独保存为一个脚本,方便后续重置再部署。
kubeadm init \
--apiserver-advertise-address=192.168.28.71 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
(2)使kubelet正常工作
普通用户执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
root用户执行:
export KUBECONFIG=/etc/kubernetes/admin.conf
以下信息保存备用,添加node节点使用,忘了也没有关系,可以使用命令查看。
kubeadm join 192.168.6.19:6443 --token dnzeik.j4kmojcalxcezr96 \
--discovery-token-ca-cert-hash sha256:8fb439131e4c8a490c38a0453a37ca897ec34851b70be2c70d19c0a4692161fb
查看命令:
kubeadm token create --print-join-command
(3)解除master节点不能跑pod
默认k8s的master节点是不能跑pod的业务,需要执行以下命令解除限制
kubectl taint node xxx-nodename node-role.kubernetes.io/master-
或
kubectl taint nodes --all node-role.kubernetes.io/master-
将 Master 恢复成 Master Only 状态
kubectl taint node xxx-nodename node-role.kubernetes.io/master="":NoSchedule
可以从下面地址获取到 kube-flannel.yml文件:
github地址
另外这里有一份附件可供参考:
kube-flannel.yml
coredns依赖于网络插件,如果不安装网络插件coredns将一直处于pending状态
部署kube-flannel:
kubectl apply -f kube-flannel.yml
在要加入的node节点上执行
kubeadm join 192.168.56.102:6443 --token h573iu.t1al4xn1cq26yll9 \
--discovery-token-ca-cert-hash sha256:ec895dbb8fc0cd180b8b17e96feefb27ae5a74abe379e01f5d8ddf49b663a394
如果找不到可以在master节点执行以下命令可以获取
kubeadm token create --print-join-command
重置节点的所有配置
安装报错无法解决时可重置,有问题可以尝试重置。
kubeadm reset
(1)下载官方默认配置文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml
github地址:
https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/cloud/1.23/deploy.yaml
在原文件中,涉及到一个镜像地址,这个地址国内的网络是无法访问的,这里需要特别处理一下。
我选择的是用阿里云的地址替换原来的k8s地址。
https://cr.console.aliyun.com/images/cn-hangzhou/google_containers/nginx-ingress-controller/detail
PS:这里的坑点很多,需要具备对容器编排、pods日志查看能力。
(2)修改配置
type: NodePort //原来是LoadBalancer NodePort只能⽤30000+的端⼝号,ClusterIP 没有限制
#externalTrafficPolicy: Local //注释或者删掉这⾏。
(3)执行部署
kubectl create -f deploy.yaml
(4) 查看结果
kubectl get deployment -n ingress-nginx
(5) 失败重新部署
//部署失败的话,可以先删掉
kubectl delete -f deploy.yaml
//再实⾏命令安装
kubectl apply -f deploy.yaml
https://kubernetes.io/zh/docs/concepts/overview/
http://docs.kubernetes.org.cn/232.html
https://www.bookstack.cn/read/kubernetes-practice-guide/troubleshooting-problems-pod-keep-crashloopbackoff.md