节点信息:
172.31.7.101 master1 控制节点
172.31.7.102 node1 工作节点
172.31.7.103 node2 工作节点
这里使用containerd作为运行时,部署可参照
https://blog.csdn.net/weixin_46476452/article/details/127670046
目录
一、系统环境初始化
二、配置apt源、下载kubeadm
三、安装cni
四、初始化kubernetes
五、配置节点认证,加入集群
六、部署calico网络插件
七、验证
八、报错处理
一、系统环境初始化
1、关闭swap
# swapoff -a
# sed -i 's@/swap@#/swap@' /etc/fstab
2、时钟同步
如果没有时钟服务下载一个
# apt install chrony
# systemctl status chronyd
# # systemctl status chronyd
3、配置内核参数
(1)、加载模块
# modprobe br_netfilter
(2)、添加内核参数
# echo -e "net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-iptables = 1 " >> /etc/sysctl.conf
(3)、配置生效
# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
我系统防火墙本身就已经关闭,因此未列出,请知悉
二、配置apt源、下载kubeadm
1、安装https包传输工具apt-transport-https,支持https的apt源
# apt-get update && apt-get install -y apt-transport-https
2、把key导入,用于校验包的完整性
# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
3、此时还没用添加仓库源,因此没有kubeadm
# apt-cache madison kubeadm
N: Unable to locate package kubeadm
3、添加kubeadm镜像阿里云的仓库源
# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
> EOF
4、更新仓库
# apt-get update
可以看见很多版本的kubeadm包,都是阿里云镜像仓库提供的,版本号要与k8s版本号保持一致
下载 1.24.3版本
# apt-get install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00
三、安装cni
cni 是 K8s 中标准调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel
Releases · containernetworking/plugins · GitHub
1、下载cni
# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
2、cni解压(提前创建/opt/cni/bin/目录)
# tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
四、初始化kubernetes
1、下载镜像(提前下载,初始化集群的时候可节省时间)
1.1、列出我们初始化v1.24.3版本kubernetes,所需要的镜像
这些镜像默认是使用Google官方镜像仓库,无法直接访问,我们可以从国内的阿里镜像仓库下载
1.2、编写脚本,执行脚本下载镜像
root@master1:/usr/local/src# cat images-down.sh
#!/bin/bash
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0
1.3、下载完毕
2、修改配置文件
# vim /etc/containerd/config.toml
61 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
127 SystemdCgroup = true
将61行Google镜像替换成阿里云的镜像
将127行值改为true
在K8S中创建容器时默认使用google官方镜像仓库的镜像k8s.gcr.io/pause:3.7 ,需要修改为国内的镜像 (3.7版本是根据上面#kubeadm config images list --kubernetes-version v1.24.3 列出的),该镜像是封装POD底层网络的,实现一个POD内多个容器公用同一个网络
3、kubeadm初始化:
root@master1:~# kubeadm init --apiserver-advertise-address=172.31.7.101 \
> --apiserver-bind-port=6443 \
> --kubernetes-version=v1.24.3 \
> --pod-network-cidr=10.100.0.0/16 \
> --service-cidr=10.200.0.0/16 \
> --service-dns-domain=cluster.local \
> --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
> --ignore-preflight-errors=swap
命令注解:
--apiserver-advertise-address=172.31.7.101(监听地址就是当前本机ip地址)
--apiserver-bind-port=6443 (apiserver监听端口默认就是6443)
--kubernetes-version=v1.24.3 (当前K8S实际版本号)
--pod-network-cidr=10.100.0.0/16 (pod网络)
--service-cidr=10.200.0.0/16 (service网络,和pod网络不能一样)--service-dns-domain=cluster.local (service域名后缀,默认是cluster.local)
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers (把镜像仓库指向阿里云的仓库)
--ignore-preflight-errors=swap (忽略因开启swap而报错)
初始化成功
上面的回显包括两四部分信息
第一:表示初始化成功
第二:表示某个节点想要使用集群需要配置认证文件,具体命令以给出
第三:需要安装网络插件flannel或者calico,并且给出了下载地址
第四: 添加worker节点需要执行的指令
五、配置节点认证,加入集群
刚初始化完成后是无法使用kubectl get查看到资源信息的,因为节点上的api service默认会连接本机的8080端口而不是api service默认的6443端口,因此各节点都需要config文件来获取这些信息
查看config配置文件的信息
root@master1:~# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://172.31.7.101:6443
指定了连接172.31.7.101:6443,
DATA+OMITTED并且使用了证书做认证,因此每个节点都需要有这个文件才能连接到api service
kubectl默认使用$HOME/.kube/config文件,向集群提供认证信息的
master1:~# mkdir -p $HOME/.kube
master1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
master1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
将 $HOME/.kube/config文件拷贝到两个node节点上,否则会有认证问题服务正常执行kubectl
root@node1:~# mkdir /root/.kube/
root@node2:~# mkdir /root/.kube/
root@master1:~# scp /root/.kube/config node1:/root/.kube/
root@master1:~# scp /root/.kube/config node2:/root/.kube/
依次加入worker节点
root@node1:~# kubeadm join 172.31.7.101:6443 --token qwqjvh.0pg5kl4crvetbjce \
> --discovery-token-ca-cert-hash sha256:f02108644fd8bb51862765f604ee5dc59630e66d535b25191bf32644df835871
六、部署calico网络插件
calico.yaml官网路径如下截图
Customize Calico configuration
1、下载calico.yaml
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.4/manifests/calico.yaml -O
2、修改calico.yaml
它默认的是192.168.0.0/16 把这个地址修改成我们初始化时给定的pod地址
3、启动calico网络插件
# kubectl apply -f calico.yaml
七、验证
1、查看节点状态,都已ready
2、查看pod状态
3、服务测试
root@master1:~# cat nginx.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: myserver-nginx-deployment-label
name: myserver-nginx-deployment
namespace: myserver
spec:
replicas: 1
selector:
matchLabels:
app: myserver-nginx-selector
template:
metadata:
labels:
app: myserver-nginx-selector
spec:
containers:
- name: myserver-nginx-container
image: nginx
#command: ["/apps/tomcat/bin/run_tomcat.sh"]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
name: http
- containerPort: 443
protocol: TCP
name: https
env:
- name: "password"
value: "123"
- name: "age"
value: "18"
---
kind: Service
apiVersion: v1
metadata:
labels:
app: myserver-nginx-service-label
name: myserver-nginx-service
namespace: myserver
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30004
- name: https
port: 443
protocol: TCP
targetPort: 443
nodePort: 30443
selector:
app: myserver-nginx-selector
创建nginx.yaml资源
root@master1:~# kubectl create ns myserver
namespace/myserver created
root@master1:~# kubectl apply -f nginx.yaml
deployment.apps/myserver-nginx-deployment created
service/myserver-nginx-service created
访问任意节点的30004端口
八、报错处理
第一次初始化不成功,看了下containerd服务状态有pause字段告警
恢复到初始化前状态文章来源:https://www.toymoban.com/news/detail-638844.html
还原初始化之前状态
# kubeadm reset
# systemctl restart containerd.service
查看配置文件发现镜像路径少一个符号,导致拉不到镜像,修改后再进行初始化就OK了文章来源地址https://www.toymoban.com/news/detail-638844.html
到了这里,关于使用kubeadm部署kubernetes 1.24.3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!