学习笔记十三:云服务器通过Kubeadm安装k8s1.25,供后续试验用

Kubeadm安装k8s1.25

k8s环境规划:

podSubnet(pod网段) 10.244.0.0/16

serviceSubnet(service网段): 10.96.0.0/12

实验环境规划:

操作系统:centos7.5

配置: 2Gib内存/4vCPU/50G硬盘

初始化安装k8s集群的实验环境

先建生产环境服务器,后面可以通过生成镜像克隆node环境

修改主机名

python 复制代码
hostnamectl set-hostname k8smaster1 && bash  #k8smaster1 为服务器名称

配置yum源

python 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum makecache

关闭防火墙

python 复制代码
systemctl stop firewalld.service   #停止firewall
systemctl disable firewalld.service    #禁止firewall开机启动
firewall-cmd --state          #查看防火墙状态
yum install -y iptables-services     #安装iptables
service iptables stop && systemctl  disable iptables   #停用iptables并关闭开机启动iptables
service iptables status
iptables -F    #清空防火墙规则

关闭selinux

python 复制代码
setenforce 0  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
getenforce   #查看是否为Disabled
swapoff -a  #关闭交换分区swap,提升性能

配置时间同步

python 复制代码
yum install -y ntpdate ntp
ntpdate cn.pool.ntp.org   
#每小时进行时间同步 
echo "* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org" >>/var/spool/cron/root
systemctl restart crond   #重启计划任务

配置主机 hosts 文件,相互之间通过主机名互相访问 192.168.40.180为你的内网IP

python 复制代码
rm -rf /etc/hosts
cat > /etc/hosts <<EOF    
192.168.40.180 k8smaster1
192.168.40.181 k8snode1
EOF

修改机器内核参数

python 复制代码
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
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
python 复制代码
sysctl -p /etc/sysctl.d/k8s.conf

重启后模块会失效,配置开机自动加载模块的脚本

python 复制代码
cat> /etc/rc.sysinit <<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF

在/etc/sysconfig/modules/目录下 新建文件如下

python 复制代码
cat> /etc/sysconfig/modules/br_netfilter.modules <<EOF
modprobe br_netfilter
EOF
#增加权限
chmod 755 /etc/sysconfig/modules/br_netfilter.modules   
lsmod |grep br_netfilter    #重启机器模块也会自动加载

配置安装k8s组件需要的阿里云的repo源

python 复制代码
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
EOF

安装基础软件包

python 复制代码
yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-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 telnet ipvsadm

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

python 复制代码
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install  docker-ce  -y
systemctl enable docker --now

配置docker镜像加速器和驱动

python 复制代码
cat> /etc/docker/daemon.json <<EOF
{
 "registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
} 
EOF
systemctl restart docker #重启docker

安装containerd服务

python 复制代码
yum install  containerd.io-1.6.6 -y
mkdir -p /etc/containerd #生成 containerd 的配置文件
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
python 复制代码
#把SystemdCgroup = false修改成SystemdCgroup = true
#把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
python 复制代码
systemctl enable containerd  --now  #配置 containerd 开机启动,并启动 containerd

修改/etc/crictl.yaml文件

python 复制代码
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

配置containerd镜像加速器,k8s所有节点均按照以下配置:

python 复制代码
vim /etc/containerd/config.toml
#找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
python 复制代码
mkdir /etc/containerd/certs.d/docker.io/ -p
python 复制代码
cat>/etc/containerd/certs.d/docker.io/hosts.toml<<EOF
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
 capabilities = ["pull"]
EOF
python 复制代码
systemctl restart containerd #重启containerd

安装初始化k8s需要的软件包

安装1.25

python 复制代码
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
systemctl enable kubelet

设置容器运行时

python 复制代码
crictl config runtime-endpoint /run/containerd/containerd.sock

k8smaster1和k8snode1都需要上传k8s_1.25.0.tar.gz 镜像包

k8s_1.25.0.tar.gz链接:https://pan.baidu.com/s/1ytLFwRB3oHxTGu1DPG9YIg?pwd=r5p1

提取码:r5p1

python 复制代码
ctr -n=k8s.io images import k8s_1.25.0.tar.gz
crictl images  #查看镜像

上传calico.tar.gz到k8smaster1上

上传calico.tar.gz到k8smaster1上,使用yaml文件安装calico 网络插件 。

链接:https://pan.baidu.com/s/17MW_un5N1-3w-yJOSNUYhw?pwd=seoz

提取码:seoz

python 复制代码
ctr -n=k8s.io images import calico.tar.gz

关闭服务器生成镜像,克隆出node节点

使用kubeadm初始化k8s集群

在master执行,确认服务启动正常

python 复制代码
systemctl restart docker
systemctl status docker
systemctl restart containerd
systemctl status containerd
python 复制代码
kubeadm config print init-defaults > kubeadm.yaml

使用kubeadm初始化k8s集群

根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,初始化节点的时候需要指定cgroupDriver为systemd

python 复制代码
cat> kubeadm.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.40.180 #控制节点的 ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8smaster1 #控制节点主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #指定阿里云镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: 1.25.0 #k8s 版本
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 #指定 pod 网段, 需要新增加这个
  serviceSubnet: 10.96.0.0/12  #指定 Service 网段
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

基于kubeadm.yaml初始化k8s集群

python 复制代码
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

出现如下截图就成功了

如果遗忘了节点的token可以在master节点执行下列命令获取token

python 复制代码
kubeadm token create --print-join-command

配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

python 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

如果初始化有问题,k8s重新初始化

python 复制代码
kubeadm reset
rm -rf /root/.kube
rm -rf /etc/cni/net.d

修改完一些配置比如kubeadm-config.yaml 后,重新初始化

python 复制代码
kubeadm init --config kubeadm.yaml --ignore-preflight-errors=SystemVerification

添加第一个工作节点

在k8snode1服务器上修改主机名

python 复制代码
hostnamectl set-hostname k8snode1 && bash  #k8snode1 为服务器名称

在k8snode1节点执行上面获取到的值,并添加参数--ignore-preflight-errors=SystemVerification

python 复制代码
kubeadm join 172.27.0.10:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d85ecacdc1520befa8fc33dfac4f16d03893888ba65949a02c293b26336efc4  --ignore-preflight-errors=SystemVerification	

出现下列截图证明成功加入了

安装kubernetes网络组件-Calico

镜像已经在 "上传calico.tar.gz到k8smaster1上" 这一步上传了

仍需上传calico.yaml到k8smaster1上,使用yaml文件安装calico 网络插件 。

链接:https://pan.baidu.com/s/1MzhaKeNdaHB7gwvhPTCMOg?pwd=91vs

提取码:91vs

python 复制代码
kubectl apply -f  calico.yaml
#注:在线下载配置文件地址是:https://docs.projectcalico.org/manifests/calico.yaml

等两分钟查看集群状态

python 复制代码
kubectl get pod -n kube-system 
kubectl get nodes

#STATUS状态是Ready,说明k8s集群正常运行了

可以把k8snode1的ROLES变成work

可以看到k8snode1的ROLES角色为空,就表示这个节点是工作节点。

按照如下方法:

python 复制代码
kubectl label node k8snode1 node-role.kubernetes.io/worker=worker

测试在k8s创建pod是否可以正常访问网络

把busybox-1-28.tar.gz上传到k8snode1、k8snode2节点,手动解压

链接:https://pan.baidu.com/s/1HdG5Zv3LThn4H5n6-bOxDQ?pwd=kyue

提取码:kyue

busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip
k8smaster1和k8snode1节点都需要执行

python 复制代码
ctr -n k8s.io images import busybox-1-28.tar.gz

在k8smaster1 执行

python 复制代码
kubectl run busybox --image docker.io/library/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
python 复制代码
ping www.baidu.com
相关推荐
强子感冒了4 分钟前
CSS基础学习:CSS选择器与优先级规则
前端·css·学习
怣505 分钟前
Linux创意命令组合:让终端变得有趣又高效
linux·运维·服务器
vortex514 分钟前
深度字典攻击(实操笔记·红笔思考)
前端·chrome·笔记
闪闪发亮的小星星17 分钟前
主旋参数(四元数)与欧拉参数
笔记·其他
lisanmengmeng20 分钟前
添加ceph节点
linux·服务器·ceph
Tinyundg23 分钟前
Linux系统分区
linux·运维·服务器
要做一个小太阳26 分钟前
华为Atlas 900 A3 SuperPoD 超节点网络架构
运维·服务器·网络·华为·架构
修己xj27 分钟前
一月存档,二月加载
学习
蒸蒸yyyyzwd41 分钟前
c网络编程学习笔记
c语言·网络·学习
UP_Continue1 小时前
Linux--基础IO
linux·运维·服务器