Kubernetes(K8s)是一个开源的容器编排系统,也是一个多宿主机的容器集群管理软件,能够自动部署、扩展和管理多宿主机上的容器应用程序。本文将详细介绍K8s的部署过程及相关注意事项,帮助大家顺利搭建K8s集群。
一、准备工作
在开始部署之前,需要准备3台全新的虚拟机,推荐配置为至少4核4G内存和200G硬盘。根据实际需求为每台机器配置静态IP,并设置主机名为”k8smaster”、”k8snode-1″和”k8snode-2″。接下来,部署过程涉及到三台机器的配置,建议通过并行会话的方式进行操作。
1、关闭SELinux和防火墙
在三台机器上同时执行以下命令:
#关闭防火墙 [root@localhost selinux]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. #关闭selinux [root@localhost selinux]# vim /etc/selinux/config SELINUX=disabled #重启机器 [root@localhost selinux]# reboot
2、配置 “/etc/hosts” 文件
为了实现主机之间的相互访问,需要在三台机器的 “/etc/hosts” 文件中添加主机名与IP的映射。例如:
[root@k8smaster ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.81.97 k8snode-2 192.168.81.98 k8snode-1 192.168.81.99 k8smaster
3、配置主机间的免密码登录
使用 SSH 配置免密码登录,以下步骤需要在三台机器上互相配置:
[root@k8smaster ~]# ssh-keygen [root@k8smaster ~]# ssh-copy-id k8smaster [root@k8smaster ~]# ssh-copy-id k8snode-1 [root@k8smaster ~]# ssh-copy-id k8snode-2 #验证是否配置成功 [root@k8smaster ~]# ssh k8snode-2 Last login: Mon May 15 15:03:46 2023
完成后,验证 SSH 免密登录是否成功,并确保在配置成功后注销(”exit”),以免影响后续操作。
4、关闭交换分区
K8s 在初始化时会检查交换分区是否关闭。通过以下命令关闭交换分区:
[root@k8snode-2 ~]# swapoff -a [root@k8snode-2 ~]# cat /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0
如果不想关闭交换分区,可以在安装时使用 “–ignore-preflight-errors=Swap” 参数来忽略这个检查。
5、修改机器内核参数
根据需要设置内核参数。
[root@k8snode-2 ~]# modprobe br_netfilter [root@k8snode-2 ~]# echo "modprobe br_netfilter" >> /etc/profile [root@k8snode-2 ~]# 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 EOF #加载配置文件 [root@k8snode-2 ~]# sysctl -p /etc/sysctl.d/k8s.conf
6、配置阿里云repo源
配置国内阿里云docker的repo源:
[root@k8snode-2 ~]# yum install -y yum-utils #添加阿里云的源 [root@k8snode-2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@k8snode-2 ~]# yum install -y yum-utils device-mapper-persistrnr-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxm12-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
配置安装k8s组件需要的阿里云的repo源:
[root@k8snode-2 ~]# cat /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0
7、配置时间同步
确保三台机器上的时间同步,可以使用 “ntp” 或 “chrony” 等工具进行配置。
[root@k8snode-2 ~]# yum install ntpdate -y #跟网络时间做同步 [root@k8snode-2 ~]# ntpdate cn.pool.ntp.org 15 May 16:18:42 ntpdate[12281]: adjust time server 84.16.67.12 offset -0.018452 sec #把时间同步做成计划任务 [root@k8snode-2 ~]# crontab -e * */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
二、安装Docker服务
1、安装Docker
在 “k8smaster” 上安装Docker:
[root@k8snode-1 ~]# yum install docker-ce-20.10.6 -y #设置服务开机启动 [root@k8snode-2 ~]# systemctl start docker && systemctl enable docker.service
2、配置Docker镜像加速器和驱动
编辑Docker的配置文件”/etc/docker/daemon.json”,添加以下内容:
[root@k8snode-2 ~]# cat /etc/docker/daemon.json { "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"], "exec-opts":["native.cgroupdriver=systemd"] } [root@k8snode-2 ~]# systemctl daemon-reload && systemctl restart dockers
三、安装配置K8s
1、安装初始化K8s所需的软件包
安装 “kubeadm”、”kubelet” 和 “kubectl”:
[root@k8snode-2 ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 #设置开机启动 [root@k8snode-2 ~]# systemctl enable kubelet
2、使用Kubeadm初始化K8s集群
在 “k8smaster” 上执行以下命令来初始化K8s集群:
[root@k8smaster ~]# scp k8simage-1-20-6.tar.gz k8snode-2:/root [root@k8smaster ~]# scp k8simage-1-20-6.tar.gz k8snode-1:/root
初始化成功后,按照提示的命令配置 “kubectl”,并注意保存下方的 “kubeadm join” 命令,以便后续添加其他节点。
导入镜像:
[root@k8smaster ~]# docker load -i k8simage-1-20-6.tar.gz
注意:以下操作都只在master上执行。
使用kubeadm初始化k8s集群:
[root@k8smaster ~]# kubeadm config print init-defaults > kubeadm.yaml [root@k8smaster ~]# cat kubeadm.yaml apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.81.99 #修改成master的ip bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: k8smaster taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers #修改为阿里云 kind: ClusterConfiguration kubernetesVersion: v1.20.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 #添加配置 scheduler: {} --- #添加配置 apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd #基于kubeadm.yaml文件初始化k8s [root@k8smaster ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
成功界面:
3、加入节点
master:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config #获得加入节点的命令 [root@k8smaster ~]# kubeadm token create --print-join-command
node:
kubeadm join 192.168.81.99:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:fe393e5d1dc83d75cfa94309f5cbd2ea3a80918342ed4bed0d5868b13c7b94df
更改roles,更改标签:
[root@k8smaster ~]# kubectl label node k8snode-1 node-role.kubernetes.io/worker=worker [root@k8smaster ~]# kubectl label node k8snode-2 node-role.kubernetes.io/worker=worker
4、更改Node节点状态
在master上操作,上传 calico.yaml:
[root@k8smaster ~]# kubectl apply -f calico.yaml
配置完成后,以上操作会显示所有节点的状态,如果一切正常,则表示 K8s 集群搭建成功。
更多指南可参考:《Kubernetes教程》
-
广告合作
-
QQ群号:707632017