k8s环境搭建

kubernetes环境搭建

有一台以上虚拟或者真机就可以搭建k8s-1.27.0。

cat /proc/version # 查看系统版本, 此次使用的是ubuntu20.0, docker版本是27.2.1意味着,k8s版本必须在1.20以上

关闭防火墙以及安全模式

# 设置group driver为systemd
vim /etc/docker/daemon.json
# 增加配置内容
"exec-opts":[
   "native.cgroupdriver=systemd"
]
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用selinux安全模式
apt install selinux-utils
getenforce # 查看enforce
setenforce 0
# 禁用swap
free # 查看交换区
swapoff -a # 禁用交换区
# 打开文件交换区注释定义
vim /etc/fstab
注释/swap.img行 /swapfile
# 修改系统主机名
hostnamectl set-hostname k8s-master
reboot # 重启使主机名生效
# 增加主机名与本机IP映射
vim /etc/hosts
172.0.1.1 k8s-master
# 开启ipv4转发,k8s需要使用进行信息传递
echo 1 > /proc/sys/net/ipv4/ip_forward

安装kubeadm,kubectl, kublet

# kubeadm基本工具安装
# 导入k8s镜像源
apt-get update
# 安装GPG密钥准备
apt-get install -y apt-transport-https ca-certificates curl
# 安装GPG密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
# 设置k8s镜像源
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
# 查看k8s版本
apt-cache madison kubelet kubeadm kubectl
# 安装k8s特定版本
apt-get install -y kubelet=1.27.1-00 kubeadm=1.27.1-00 kubectl=1.27.1-00
# 安装最新版本
apt-get install -y kubelet kubeadm kubectl
# 如果需要卸载,使用以下指令
# apt-get remove kubelet kubectl kubeadm
# 锁定软件版本-禁止升级
apt-mark hold kubelet kubeadm kubectl
# kublet刚安装完成时,会处于一个自启动状态,
systemctl status kubelet

docker运行时选择

k8s1.20以下使用dockershim作为运行时,高性能和轻量级的选择containerd,docker的高级功能使用cri-dockerd

安装cri-dockerd运行时

cri-docker.sock是用来建立docker和k8s之间的通信的。首先启动cri-docker服务,然后k8s的请求通过gRPC协议被该服务转发给docker

# 选择对应系统的deb安装包进行下载
wget https://https://github.com/Mirantis/cri-dockerd/releases/tag/v0.3.4/cri-dockerd_0.3.4.amd64.tgz
tar -zxvf cri-dockerd-0.3.4.amd64.tgz -C /tmp
cp /tmp/cri-dockerd/cri-dockerd /usr/bin/
# 将下载的cri-docker.service和cri-docker.socket放置到合适位置
cp cri-docker.service cri-docker.socket /etc/sytemd/system
cd /etc/systemd/system
vim cri-docker.service
# 在cri-docker.service添加以下两句 fd:// --network-plugin=cni  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# 修改完毕之后加载配置,设置开机启动
systemctl daemon-reload
systemctl enable --now cri-docker.service cri-docker.socket
systemctl enable cri-docker # 开机启动
systemctl start cri-docker

配置containerd运行时

配置containerd运行时配置

containerd config default > config.toml
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
str1="registry.k8s.io/pause:3.8"
str2="registry.aliyuncs.com/google_containers/pause:3.9"
sed -i "/sandbox_image/ s%${str1}%${str2}%g" /etc/containerd/config.toml
sed -i '/SystemdCgroup/ s/false/true/g' /etc/containerd/config.toml
systemctl restart containerd && systemctl status containerd

更改sandbox_iamge为私有镜像仓的地址

img

更改cri.registryconfig_pathhosts.toml的路径

img

开启从私有镜像仓拉取镜像功能,containerd2.x系列支持通过hosts.toml配置私有镜像仓访问

mkdir -p /etc/containerd/certs.d/192.168.133.22:5000
vi hosts.toml
# 写入以下字段
server = "http://192.168.133.22:5000"
[host."http://192.168.133.22:5000"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true

此时通过ctr image pull测试接口是否是不行的,则是因为ctr直接应对docker,crictl是k8s侧的

初始化k8s主节点

# 在有init.default.yaml文件的目录下初始化master
kubeadm config print init-defaults > init.default.yaml

# 修改配置文件
vim init.default.yaml
# 修改以下内容
advertiseAddress: 192.168.137.131 # 设置为自己的ip
criSocket: ///var/run/containerd/containerd.sock # 设置sock
name:k8s-master # 更改名字
imageRepository: registry.aliyuncs.com/google_containers # 镜像容器更改
kubernetesVersion: 1.27.0
# 增加podSubnet,由于后续会安装flannel 网络插件,该插件必须在集群初始化时指定pod地址
# 10.244.0.0/16 为flannel组件podSubnet默认值,集群配置与网络组件中的配置需保持一致
networking.podSubnet: 10.244.0.0/16
# 拉取相关镜像
kubeadm config images pull --config=init.default.yaml
# 初始化集群主节点
kubeadm init --config=init.default.yaml --ignore-preflight-errors=all
# 普通用户和根用户二选一
# 普通用户执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 根用户下执行
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile
# 添加节点到集群命令
kubeadm join 192.168.137.131:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:3384be2b7788c450fc7d43250f37bd4bfa9a5f7782ff25ca277ae673be0b1ff8 
# 查看集群状态
# 查看所有pod
kubectl get pods --all-namespaces
# 查看节点
kubectl get node
# 查看所有组件 cs代表的资源是componentstatuses
kubectl get cs

安装calico网络插件

1、下载calico安装包

首先查看calico与k8s兼容的版本

img

由于本次安装的k8s为1.27.0,选择3.25.x版本calico。

# 如果无法直接下载,则直接从网页进行下载
wget https://github.com/projectcalico/calico/releases/tag/v3.25.2/release-v3.25.2.tgz -O

2、 上传安装包

需要上传的文件有calico-cni.tar,calico-node.tar,calico-kube-controllers.tar,calico.yaml文件

# 导入镜像
ctr -n k8s.io images import calico-kube-controllers.tar

3、配置网络

# 查看当前的CIDR
grep -A1 CALICO_IPV4POOL_CIDR calico.yaml
# 将其配置成为10.244.0.0/16

img

posted @ 2024-10-13 23:49  LemHou  阅读(107)  评论(0)    收藏  举报