跟犀牛云一样做网站的,哪些网站可宣传,做执法设备有哪些网站,host绑定网站在CentOS 7上搭建Kubernetes集群
kubeadm官方文档 https://blog.51cto.com/zhangxueliang/4952945
前置步骤#xff08;所有结点#xff09;
CentOS 7.9 物理机或虚拟机三台#xff0c;CPU 内核数量大于等于 2#xff0c;且内存大于等于 4Ghostname 不是 localhost…在CentOS 7上搭建Kubernetes集群
kubeadm官方文档 https://blog.51cto.com/zhangxueliang/4952945
前置步骤所有结点
CentOS 7.9 物理机或虚拟机三台CPU 内核数量大于等于 2且内存大于等于 4Ghostname 不是 localhost且不包含下划线、小数点、大写字母任意节点都有固定的内网 IP 地址(集群机器统一内网)任意节点上 IP 地址 可互通无需 NAT 映射即可相互访问且没有防火墙、安全组隔离任意节点不会直接使用 docker run 或 docker-compose 运行容器和Pod
关闭防火墙或者阿里云开通安全组端口访问
$ sudo systemctl stop firewalld sudo systemctl disable firewalld关闭selinux
$ sed -i s/enforcing/disabled/ /etc/selinux/config
$ setenforce 0永久关闭swap
$ swapoff -a
$ sed -ri s/.*swap.*/#/ /etc/fstab将桥接的 IPv4 流量传递到 iptables 的链。修改/etc/sysctl.conf
net.ipv4.ip_forward1
net.bridge.bridge-nf-call-ip6tables1
net.bridge.bridge-nf-call-iptables1
net.ipv6.conf.all.disable_ipv61
net.ipv6.conf.default.disable_ipv61
net.ipv6.conf.lo.disable_ipv61
net.ipv6.conf.all.forwarding1执行命令以应用
$ sudo sysctl -p安装容器运行时所有结点
下面的过程安装了docker v23.0, containerd v1.6.18, nerdctl v1.2.1。
按照docker官方文档 即可。
为了规避问题1 以及问题2 需要修改所有结点上的containerd配置参考这里
$ cat EOF | sudo tee /etc/containerd/config.toml
version 2
[plugins]
[plugins.io.containerd.grpc.v1.cri]
sandbox_image registry.aliyuncs.com/google_containers/pause:3.9
EOF
$ sudo systemctl restart containerd
$ sudo containerd config dump|grep sandsandbox_image registry.aliyuncs.com/google_containers/pause:3.9安装nerdctl
$ wget https://github.com/containerd/nerdctl/releases/download/v1.2.1/nerdctl-1.2.1-linux-amd64.tar.gz
$ tar xzvf nerdctl-1.2.1-linux-amd64.tar.gz
$ sudo cp nerdctl /usr/local/bin/
$ sudo nerdctl namespace ls安装Kubernetes所有结点
卸载旧版本
$ sudo yum remove -y kubelet kubeadm kubectl配置k8s源。准备文件/etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttp://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg安装kubelet、kubeadm、kubectl
$ sudo yum install -y kubelet kubeadm kubectl --disableexcludeskubernetes启动kubelet。注意如果此时查看kubelet的状态他会无限重启等待接收集群命令和初始化。这个是正常的。
$ sudo systemctl enable kubelet systemctl start kubelet国外镜像下载问题
因谷歌网络限制问题国内的K8ser大多数在学习Kubernetes过程中因为镜像下载失败问题间接地产生些许失落感笔者也因此脑壳疼故翻阅资料得到以下解决方式 在应用yaml文件创建资源时将文件中镜像地址进行内容替换即可
k8s.gcr.io 地址替换为registry.aliyuncs.com/google_containersquay.io 地址替换为quay.mirrors.ustc.edu.cn或者quay-mirror.qiniu.comgcr.io地址替换为registry.aliyuncs.com
kubeadm依赖的所有镜像可以用如下脚本下载
$ echo EOF | tee kubeadm-images.sh
#!/bin/bash
images$(kubeadm config images list)
for image in ${images[]} ; doimageMirrorregistry.aliyuncs.com/google_containers/$(echo $image | awk -F / {print $NF})echo $image - $imageMirrordocker pull $imageMirrordocker tag $imageMirror $imagedocker rmi $imageMirror
done
EOF
$ sudo bash kubeadm-images.sh新版本的kubeadm不再需要上述trick选项--image-repository指向国内mirror即可。
初始化master结点单个master结点
初始化master成功将输出“初始化worker结点”的命令
$ sudo kubeadm init --image-repositoryregistry.aliyuncs.com/google_containers
[init] Using Kubernetes version: v1.26.1
......如果init失败可以kubeadm reset --force后再次尝试。
配置kubectl
$ export KUBECONFIG/etc/kubernetes/admin.confnerdctl文档指出containerd中的container和image都有namespace属性。默认defaultkubernetes用的是k8s.io。 按namespace统计容器和image数量
$ sudo nerdctl namespace ls
NAME CONTAINERS IMAGES VOLUMES LABELS
k8s.io 21 36 0
moby 0 0 0 列出所有kubernetes本地容器
$ sudo nerdctl -n k8s.io ps初始化worker结点多个worker结点
使用刚才master打印的令牌命令加入。如果下面命令失败可从上一节初始化master结点从头再来。
$ sudo kubeadm join 192.168.110.48:6443 --token dna6ti.7hu4gx3r43rid67w --discovery-token-ca-cert-hash sha256:d68e1e0398dadac6d7196faac56bc9447a499203f30a1e46daf874d59aaf493d如果超过2小时忘记了令牌可在master上执行如下命令再次打印令牌
$ sudo kubeadm token create --print-join-command在master结点观察worker结点状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm48 Ready control-plane 85m v1.26.1
vm49 Ready none 8m1s v1.26.1
vm50 Ready none 41s v1.26.1配置pod网络插件calico
注意官方文档已指出在安装pod网络插件之前coredns不会启动。 Calico在Cilium之后添加了基于eBPF的数据面 用户可在iptables和eBPF之间选择默认是iptables。
部署calico
$ curl -o calico-v3.25.yaml https://raw.githubusercontent.com/projectcalico/calico/release-v3.25/manifests/calico.yaml
$ kubectl apply -f calico-v3.25.yaml查看状态等待calico和coredns相关pod就绪。注意coredns仅在部署pod网络插件后启动
$ watch kubectl get pod -n kube-system -o wide冒烟测试部署nginx服务测试dns解析服务名
$ cat EOF | sudo tee nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: default
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80hostPort: 80protocol: TCP- containerPort: 443hostPort: 443protocol: TCP
---
apiVersion: v1
kind: Service
metadata:name: nginx-srv
spec:clusterIP: Noneports:- port: 80name: http- port: 443name: httpsselector:app: nginx
EOF
$ kubectl apply -f nginx.yaml
$ kubectl run -it busybox --imagebusybox --restartNever
/ # ping nginx-srv
PING nginx-srv (172.16.33.196): 56 data bytes
64 bytes from 172.16.33.196: seq0 ttl62 time1.146 ms
64 bytes from 172.16.33.196: seq1 ttl62 time0.703 ms
^C