K8S之使用kubeadm部署安装集群!

本文档详细介绍了如何使用kubeadm在CentOS7虚拟机上搭建Kubernetes集群,包括环境准备、系统初始化、docker和kubeadm的安装,以及节点的添加,最终成功创建了一个稳定的Kubernetes集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

一:环境准备

  • VMware软件
  • 1台centos7虚拟机作为master节点,IP地址:192.168.10.129,CPU核心数最低为2
  • 1台centos7虚拟机作为node01节点,IP地址:192.168.10.135
  • 1台centos7虚拟机作为node02节点,IP地址:192.168.10.131

二:集群部署过程

2.1:设置系统初始化

修改三台虚拟机主机名

[root@192 ~]# hostnamectl set-hostname k8s-master	'//相同方法修改node节点主机名为k8s-node01和node02'
[root@192 ~]# su
[root@k8s-master ~]# 
  • 使三个节点可以相互关联,在master节点中配置如下
[root@k8s-master ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.129 k8s-master
192.168.10.135 k8s-node01
192.168.10.131 k8s-node02
[root@k8s-master ~]# scp /etc/hosts root@k8s-node01:/etc/hosts	'//将之复制到node01节点'
    '//期间需要输入yes和node01节点的密码'
[root@k8s-master ~]# scp /etc/hosts root@k8s-node01:/etc/hosts

2.1.1:三个节点初始化系统,仅展示master节点操作

  • 安装依赖包
- [root@k8s-master ~]# yum install -y \
> conntrack \
> ntpdate \
> ntp \
> ipvsadm \
> ipset \
> jq \
> iptables \
> curl \
> sysstat \
> libseccomp \
> wget  \
> vim net-tools git
  • 清空防火墙规则
[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld	'//关闭防火墙并设置为开启不自启动'
[root@k8s-master ~]# yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save	'//安装iptables服务且开启iptables并设置为开机自启且清空iptables规则且保存iptables配置'
  • 关闭SELINUX和swap功能,如果pod放在swap内会降低工作效率
[root@k8s-master ~]# swapoff -a && sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab	'//关闭swap分区【虚拟内存】并且永久关闭虚拟内存。'
[root@k8s-master ~]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config	'//关闭selinux'
  • 调整内核参数
[root@k8s-master ~]# cat > kubernetes.conf <<EOF
> net.bridge.bridge-nf-call-iptables=1	'//开启网桥模式'
> net.bridge.bridge-nf-call-ip6tables=1	'//开启网桥模式'
> net.ipv4.ip_forward=1
> net.ipv4.tcp_tw_recycle=0
> vm.swappiness=0	'//禁止使用swap交换空间,只有当系统OOM时才允许使用'
> vm.overcommit_memory=1	'//不检查物理内存是否够用'
> vm.panic_on_oom=0 	'//开启OOM'
> fs.inotify.max_user_instances=8192
> fs.inotify.max_user_watches=1048576
> fs.file-max=52706963
> fs.nr_open=52706963
> net.ipv6.conf.all.disable_ipv6=1	'//关闭ipv6'
> net.netfilter.nf_conntrack_max=2310720
> EOF
[root@k8s-master ~]# cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf	'//将文件放到sysctl.d目录下,在启动时调整这些内核参数'
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/kubernetes.conf	'//使之立即生效'
若提示:sysctl:cannot stat /proc/sys/net/netfilter/nf_conntrack_max:没有那个文件或目录:##是因为内核版本小于4.0,稍后更新内核即可
- 调整系统时区:若安装centos7时候选择的是上海则不需要更改
#设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai
#将当前的UTC时间写入硬件时钟
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog 
systemctl restart crond
  • 关闭不需要的服务
[root@k8s-master ~]# systemctl stop postfix &&systemctl disable postfix	'//关闭邮件服务且开启不自启动'
- 设置日志保存方式为journald日志
'//创建journald日志保存目录和配置文件存放目录'
[root@k8s-master ~]# mkdir /var/log/journal
[root@k8s-master ~]# mkdir /etc/systemd/journald.conf.d
[root@k8s-master ~]# cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
> [Journal]
>  #持久化保存到磁盘
> Storage=persistent
> 
>  #压缩历史日志
> Compress=yes
> SyncIntervalSec=5m
> RatelimitInterval=30s
> RatelimitBurst=1000
> 
> #最大占用空间10G
> SystemMaxUse=10G
> 
> #单日志文件最大200M
> SystemMaxFileSize=200M
> 
> #日志保存时间2
> MaxRetentionSec=2week
> 
> #不将日志转发到syslog
> ForwardToSyslog=no
> EOF
[root@k8s-master ~]# systemctl restart systemd-journald	'//重启journald'
  • 升级系统内核为4.4,提高k8s系统运行的稳定性
[root@k8s-master ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm	'//升级RPM包'
[root@k8s-master ~]# yum --enablerepo=elrepo-kernel install -y kernel-lt	'//安装内核'
[root@k8s-master ~]# grub2-set-default "CentOS Linux (4.4.213-1.el7.elrepo.x86_64) 7 (Core)"	'//设置开机从新内核启动'
[root@k8s-master ~]# init 6	'//重启'
[root@k8s-master ~]# uname -r	'//检查内核版本'
4.4.213-1.el7.elrepo.x86_64

2.2:kubeadm部署安装

  • kube-proxy开启ipvs的前置条件,主从都做
    [root@k8s-master ~]# modprobe br_netfilter ‘//加载netfilter模块’
    ‘//引导模块依赖’
[root@k8s-master ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF
[root@k8s-master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2.2.1:docker安装,主从都做
  • 安装docker依赖
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
  • 加载阿里云docker镜像,YUM仓库
[root@k8s-master ~]# yum-config-manager \
> --add-repo \
> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新并安装docker:时间较长
[root@k8s-master ~]# yum update -y && yum install -y docker-ce
  • 安装完毕重启系统
[root@k8s-master ~]# grub2-set-default "CentOS Linux (4.4.213-1.el7.elrepo.x86_64) 7 (Core)" 
[root@k8s-master ~]# init 6 或者 reboo
'//如果光标不是在4.4版本上停留,一定要手动选择4.4版本'
  • 开启docker
[root@k8s-master ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "exec-opts": ["native.cgroupdriver=systemd"],
> "log-driver": "json-file",
> "log-opts": {
> "max-size": "100m"
> }
> }
> EOF
[root@k8s-master ~]# mkdir ‐p /etc/systemd/system/docker.service.d
[root@k8s-master ~]# systemctl daemon-reload && systemctl restart docker && systemctl enable docker	'//重载daemon,重启docker,开机自启docker'
2.2.2:kubeadm安装,主从都做
  • 导入阿里云K8Syum仓库
[root@k8s-master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=0
> repo_ gpgcheck=0
> gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
> http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
[root@k8s-master ~]# yum -y install kubeadm-1.15.1 kubect1-1.15.1 kubelet-1.15.1
  • 开机自启动kubelet
[root@k8s-master ~]# systemctl enable kubelet.service
  • 解压kubeadm镜像
[root@k8s-master ~]# mount.cifs //192.168.11.1/ccc /mnt
Password for root@//192.168.11.1/ccc:  
[root@k8s-master ~]# cd /mnt/kubernetes/
[root@k8s-master kubernetes]# mkdir /opt/k8s
[root@k8s-master kubernetes]# tar zxvf kubeadm-basic.images.tar.gz -C /opt/k8s/
  • 将解压的镜像复制到node节点
[root@k8s-master kubernetes]# scp -r /opt/k8s/ root@k8s-node01:/opt/k8s
[root@k8s-master kubernetes]# scp -r /opt/k8s/ root@k8s-node02:/opt/k8s
  • 编写一个脚本,快捷导入kubeadm
[root@k8s-master ~]# vim daoru.sh	'//编辑脚本'
#!/bin/bash
ls /opt/k8s/kubeadm-basic.images > /opt/k.txt
cd /opt/k8s/kubeadm-basic.images

for i in `cat /opt/k.txt`
do
        docker load -i $i
done

rm -rf /opt/k.txt

[root@k8s-master ~]# chmod +x daoru.sh 	'//增加脚本执行权限'
[root@k8s-master ~]# scp daoru.sh root@k8s-node01:	'//复制到节点'
[root@k8s-master ~]# scp daoru.sh root@k8s-node02:
[root@k8s-master ~]# ./daoru.sh 	'//每个节点都执行脚本'
  • 初始化主节点,node节点不需要操作
[root@k8s-master ~]# cd /opt
[root@k8s-master opt]# kubeadm config print init-defaults > kubeadm-config.yaml
[root@k8s-master opt]# vim kubeadm-config.yaml 
'//12行改为当前本机IP,冒号后面要有空格'
 advertiseAddress: 192.168.233.128


'//34行当前版本为:v1.15.1'
kubernetesVersion: v1.15.1

'//在37行下方添加pod节点网段'
  serviceSubnet: 10.96.0.0/12
  podSubnet: "10.244.0.0/16"	'//此IP地址为flannel自动分配的地址段落'
'//在39行下面插入默认调度方式为:ipvs'
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates :
   SupportIPVSProxyMode: true
mode: ipvs
  • 开始初始化主节点
[root@k8s-master opt]# kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
  • 查看kubeadm-init.log ,并根据提示进行操作
[root@k8s-master opt]# vim kubeadm-init.log 
'//56、57、58行三行话要复制出来作为命令输入'
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master opt]# mkdir -p $HOME/.kube
[root@k8s-master opt]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master opt]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master opt]# kubectl get node	'//查看节点状态'
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   4m57s   v1.15.1
  • 移动重要的文件
[root@k8s-master opt]# mkdir k-install
...省略操作,文件移动后为下方树状图
[root@k8s-master opt]# tree /opt/k-install/
/opt/k-install/	'//创建k-install目录'
├── code	'//在k-install下创建code目录'
   ├── kubeadm-config.yaml	'//将这两个文件移动到code目录'
   └── kubeadm-init.log
└── plugin	'//在k-install目录下创建plugin目录'
    └── flannel	'//在plugin目录下创建flannel目录'

3 directories, 2 files
  • 下载并安装flannel组件
[root@k8s-master opt]# cd k-install/plugin/flannel/
[root@k8s-master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@k8s-master flannel]# kubectl create -f kube-flannel.yml
[root@k8s-master flannel]# kubectl get pod -n kube-system
    '//稍等会发现flannel是running状态了'
[root@k8s-master flannel]# kubectl get node
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   162m   v1.15.1	'//发现k8s是ready状态了'
  • node节点操作,添加到master节点
主节点的 kubeadm-init.log中最下面有这两句话,复制到node节点中执行自动添加到主节点之中
[root@k8s-master flannel]# cd ../../code/
[root@k8s-master code]# ls
kubeadm-config.yaml  kubeadm-init.log
[root@k8s-master code]# vim kubeadm-init.log 
kubeadm join 192.168.233.128:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:fb07c549867486b9dc43dd6f00267f335ff250978476e9d177b43ce1e450c375
'//将这两句话复制到node节点直接执行'
[root@k8s-master code]# kubectl get pod -n kube-system -o wide	'//查看更详细的信息'
[root@k8s-master code]# kubectl get pod -n kube-system -w	'//监控状态'
    '//其他省略,这俩正在初始化,我们监控,等到他running'
kube-flannel-ds-amd64-cvg8v          0/1     Init:0/1   0          2m35s
kube-flannel-ds-amd64-k69bq          0/1     Init:0/1   0          2m38s
[root@k8s-master code]# kubectl get node
k8s-master   Ready    master   162m   v1.15.1
k8s-node01   Ready    node     162m   v1.15.1
k8s-node02   Ready    node     162m   v1.15.1
  • 集群搭建成功

2.3:实验结束,集群搭建成功

[root@k8s-master code]# kubectl get node
k8s-master   Ready    master   162m   v1.15.1
k8s-node01   Ready    node     162m   v1.15.1
k8s-node02   Ready    node     162m   v1.15.1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值