文章目录
前言
这是本人学习K8s之路的复习笔记,把学到的东西记录下来,分享出去才算学会了,
本文章学习路线基于阿良老师的书籍《Kubernetes企业级云原生运维实战》。
一、需要准备的软件
自行百度下载安装或使用平替软件。
- VMware
- Xshell
- 访问github等网址的网络
二、安装系统
推荐使用 CentOS 或 Anolis系统
阿里CentOS镜像地址 阿里Anolis镜像地址
华为CentOS镜像地址
本文章将使用CentOS 7版本操作。
安装步骤请自行百度或站内搜索。
三、配置系统环境
注意:以下所有命令确保每个虚拟机都配置 除IP以及hostname外
yum update -y #更新系统
yum install -y wget #安装wget
cd /etc/yum.repos.d/ 进入yum源目录
cp CentOS-Base.repo CentOS-Base.repo.backup #备份原源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #安装阿里源
cat CentOS-Base.repo #查看新源内容
yum clean all #清理yum缓存
yum makecache #生成新缓存
yum install -y vim #安装vim工具
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld && iptables -F
#关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
cat /etc/fstab
#关闭seLinux
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
cat /etc/selinux/config
做完了以上工作,请将此虚拟机关机并克隆最少三个。
更改克隆后的虚拟机IP分别为(可按实际情况自己分配IP,此处只做举例)
192.168.X.71
192.168.X.72
192.168.X.73
并按照下面的代码将三台或更多虚拟机更名为 k8s-master k8s-node1 k8s-node2 …
hostnamectl set-hostname [YOUR NEW HOSTNAME] #更改hostname
#如: hostnamectl set-hostname k8s-master
#追加host
#给所有本集群的虚拟机追加host
cat >> /etc/hosts << EOF
192.168.51.71 k8s-master
192.168.51.72 k8s-node1
192.168.51.73 k8s-node2
EOF
#某些 Kubernetes 网络插件可能使用网络桥接(Bridge),为了确保网络桥接的数据包经过 Iptables 处理,需要启用相关的内核参数
#可通过以下命令自动生成文件,或手动创建内容
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
sysctl --system #生效
#同步时间
yum install ntpdate -y
ntpdate time.windows.com
四、安装Docker
以下命令均使用root账号进行操作
在所有节点上安装并启动 Docker
卸载旧版本docker
#方法1
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#方法2
yum remove docker-ce docker-ce-cli containerd.io
安装镜像配置
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 #使用阿里源地址
安装指定版本Docker
yum install -y docker-ce-24.0.0 #安装指定版本docker (本文使用此版本)
yum install docker-ce #安装最新版本docker
#启动并设置开机启动项
systemctl start docker
systemctl enable docker
配置Docker镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["替换为你的实际加速地址(自己百度找,阿里云的docker加速仅限于阿里云服务器,更多的加速器已经被ban了)"]
}
EOF
systemctl daemon-reload
systemctl restart docker
五、在所有节点安装并启动 cri-docker
cri-docker下载地址 找到适用于你系统平台版本的安装包,下载该安装包,然后将其上传到所有节点上并进行安装。
本文使用 cri-dockerd-0.3.2-3.el7.x86_64.rpm 进行安装。
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
#安装完成后,修改 Systemd 服务文件,将依赖的 Pause 镜像指定为阿里云镜像地址:
vim /usr/lib/systemd/system/cri-docker.service
···
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
···
#启动并设置开机启动项
systemctl start cri-docker
systemctl enable cri-docker
六、安装 kubeadm 和 kubelet
在安装k8s之前,请确认已经将上面提到的/etc/hosts 以及 /etc/sysctl.d/k8s.conf 配置成功。
1.添加阿里云源
vim /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
2.安装指定版本kubeadm kubelet
yum install -y kubeadm-1.28.0 kubelet-1.28.0
#kubeadm 仅是一个集群搭建工具,不涉及启动。kubelet 是一个守护进程程序,由kubeadm 在搭建过程中自动启动,这里仅设置开机启动即可
systemctl enable kubelet
3.部署master节点
在主节点(master)执行以下命令
kubeadm init \
--apiserver-advertise-address=192.168.X.71 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.0 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--cri-socket=unix:///var/run/cri-dockerd.sock
# --apiserver-advertise-address:指定 API Server 监听的 IP 地址。如果没有设置,则将使用默认的网络接口。
# --image-repository:指定镜像仓库地址。默认值为“registry.k8s.io”,但该仓库在中国无法访问,因此这里指定阿里云仓库。
# --kubernetes-version:指定 Kubernetes 版本。
# --pod-network-cidr:指定 Pod 网络的 CIDR 地址范围。
# --service-cidr:指定 Service 网络的 CIDR 地址范围。
# --cri-socket:指定 kubelet 连接容器运行时的 UNIX 套接字文件。
#输出结果
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.164.71:6443 --token qpocfe.myfmt4119zmlzv0o \
--discovery-token-ca-cert-hash sha256:6badaa2fc2aa3626229c7e00b48b7a8d364e96e1380ef398007d25d0991d1bae
出现以上提示,即代表安装完成,根据提示执行操作即可:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.部署Node节点
在所有的工作节点执行以下命令:
kubeadm join 192.168.164.71:6443 --token qpocfe.myfmt4119zmlzv0o \
--discovery-token-ca-cert-hash sha256:6badaa2fc2aa3626229c7e00b48b7a8d364e96e1380ef398007d25d0991d1bae \
--cri-socket=unix:///var/run/cri-dockerd.sock #必须添加此参数
#输出结果
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
以在 Master 节点上执行“kubectl get nodes”命令来查看节点
kubectl get nodes
#输出结果
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 2m49s v1.28.0
k8s-node1 Ready <none> 56s v1.28.0
k8s-node2 Ready <none> 49s v1.28.0
4.部署网络插件(Calico)
在上述结果中,节点状态显示为“NotReady”,表示该节点尚未准备就绪。这是由于kubelet 服务未发现网络插件导致的,所以我们需要安装一个网络插件,常见的网络插件包括 Calico、Flannel、Cilium 等,这里选择使用 Calico 作为 Kubernetes 网
络插件。
#在[主节点]安装Calico插件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
或自行下载到本地后上传到服务器。
[root@k8s-master ~]# kubectl create -f tigera-operator.yaml
[root@k8s-master ~]# vim custom-resources.yaml
...
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16 #更改此处为修改此值,与“kubeadm init”命令中指定的 Pod 网络CIDR 地址(--pod-network-cidr)范围保持一致
encapsulation: VXLANCrossSubnet
...
[root@k8s-master ~]# kubectl create -f custom-resources.yaml
输出结果
稍等片刻(三四分钟,根据实际网络情况而定)后,查看pod对象:
[root@k8s-master ~]# kubectl get pods -n calico-system
#输出结果
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-694b7955b5-7t447 1/1 Running 0 5m52s
calico-node-ndf8c 1/1 Running 0 5m52s
calico-node-wn2dd 1/1 Running 0 5m52s
calico-node-z6vh6 1/1 Running 0 5m52s
calico-typha-68765947d7-gltbz 1/1 Running 0 5m52s
calico-typha-68765947d7-m2kc9 1/1 Running 0 5m52s
csi-node-driver-fv7b2 2/2 Running 0 5m52s
csi-node-driver-h86q7 2/2 Running 0 5m52s
csi-node-driver-tqnx6 2/2 Running 0 5m52s
#再次查看node节点 发现已经是Ready状态了。
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 31m v1.28.0
k8s-node1 Ready <none> 29m v1.28.0
k8s-node2 Ready <none> 29m v1.28.0
总结
以上就是k8s安装的全部内容,希望对看到这篇文章的你有所帮助。
后续可以自己查资料的方式安装 Dashboard 这是官方开发的一个 Web 管理系统。通过它,你可以管理集群资源、查看应用概览、查看容器日志和访问容器等操作
更多操作命令可以看下面这篇文章。
k8s命令大全