准备工作
操作系统版本:CentOS Linux release 7.9.2009 (Core)
虚拟机硬件配置:2核8G内存(最低2G),硬盘最低25G;
linux内核版本(3.10版本尝试失败):5.4.268-1.el7.elrepo.x86_64
linux_升级LINUX内核步骤
docker版本:Docker version 25.0.1, build 29cf629
安装网络环境和其他环境设置
注意:将默认网络改为eth0网卡(我原来的是ens33改为了eth0)
Linux网卡没有eth0显示ens33原因以及解决办法
如果就3.10版本的linux内核,需要升级
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
setenforce 0 #临时
- 关闭swap(要重启虚拟机)
sed 's/.swap./#&/' /etc/fstab #永久
swapoff -a #临时
- 根据规划设置主机名,以下3台主机
192.168.43.104 k8s-master
192.168.43.105 k8s-node1
192.168.43.106 k8s-node2
- 在master节点中添加
cat >> /etc/hosts
192.168.43.104 k8s-master
192.168.43.105 k8s-node1
192.168.43.106 k8s-node2
EOF
- 添加ipv4和ipv6桥接的配置(会自动创建k8s.conf文件)
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
sysctl --system # 执行这条命令生效
- 时间同步
yum install ntpdate -y
ntpdate time.windows.com
安装docker环境
- 安装docker
先卸载
yum list installed | grep docker
yum remove docker-ce.x86_64 -y
rm -rf /etc/docker
rm -rf /var/lib/docker
rm -rf /usr/docker
rm -rf /run/docker
rm -rf /bin/docker
rm -rf /*/*/docker
查看有没有卸载干净
ll /*/docker
ll /*/*/docker
find / -name docker
再安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
- 配置镜像下载加速
tee /etc/docker/daemon.json <<-'EOF' {"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://7zi5cb9i.mirror.aliyuncs.com"] } EOF
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
# 以下两项设置成yes:vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
安装kubeadmin、kubelet、kubectl
添加k8s镜像源
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
- 安装kubeadm kubelet kubectl (每个节点都要安装)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet # 设置开机启动
systemctl start kubelet
# 查看状态,其它东西还没配置好,现在是启动不起来的
systemctl status kubelet
1.每个节点安装kubeadmin(快速构建集群环境的工具,主节点设置Master,从节点join到集群)
2.每个节点安装kubelet(真正干活的)
3.每个节点安装kubectl(命令行工具)
4.每个节点都要安装Docker(master和Node都要,容器运行时环境)
安装k8s master节点
- 安装k8s-master节点
- 初始化master节点(仅在master上执行)
kubeadm init \
--apiserver-advertise-address=192.168.43.104 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
如果执行init报错,再次执行之前要重置初始化: kubeadm reset -f
查看日志:tail -f /var/log/messages
journalctl -xeu kubelet
执行成功:
# 直接复制控制台上的几条命令执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 从节点加入集群中
kubeadm join 192.168.43.104:6443 --token 334rev.g1ubyahjflqnf9f0 \
--discovery-token-ca-cert-hash sha256:17130a159cf0b3f5b9836bf13d2e522c12ab89f92bb6ff150678d0d96e314095
如果token过期了,用命令重新生成:kubeadm token create --ttl 0 --print-join-command
# 安装CNI网络插件Calico(主节点上安装)
- 下载calico资源文件:wget https://docs.projectcalico.org/manifests/calico.yaml
- 查看文件需要的镜像:
- 可以看到默认是从docker.io下载的,速度太慢,需要替换docker.io
sed -i 's#docker.io/##g' calico.yaml
- 修改calico.yaml配置文件(如果在master节点初始化指定了pod的ip(--pod-network-cidr=10.244.0.0/16),这步可以省略。)
- 执行calico.yaml文件
- 查看运行状态(耐心等待):kubectl get po -n kube-system
- 查看节点状态:kubectl get nodes
- 查看没有running的pod原因:kubectl describe po calico-node-7wrw7 -n kube-system
- 等待结果,大概等了13分钟,状态全部变成running
- 还可以使用watch命令监控状态:watch kubectl get pod -n kube-system -o wide
测试一下:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
在浏览器访问一下nginx(在任意节点下都能访问)
使用curl命令访问一下nginx
- 安装k8s-node1 / k8s-node2
在任意从节点上执行kubectl都会报错,原因是从节点执行命令需要链接主节点的api-server,但是从节点并不知道api-server的访问地址。
kubectl get nodes
所以,需要将做如下配置
- 将master节点的 /etc/kubernetes/admin.conf 文件拷贝到两个从节点
scp -r /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes/
scp -r /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes/
- 配置一个环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
- 刷新配置 source /etc/profile