K8s部署,新版本
之前部署的老版本,发现写的挺辣g,之前发布的资源也已经过期了。
所以算是这篇(https://shiao.blog.csdn.net/article/details/127246182)的升级版本。
单节点部署k8s(仅供测试用)
环境准备
版本兼容非常重要,若更改,请自行寻找相关兼容版本的资源。
操作系统:CentOS7.9
docker环境版本:20.10.14
k8s:1.23.1(注意k8s1.24就得用cri-dockerd)
k8s依赖docker环境
docker部署
参考:https://shiao.blog.csdn.net/article/details/152792355
k8s部署
主机名称不能为localhost
hostnamectl set-hostname 主机名称
关闭swap分区(防止内存自动交换)
swapoff -a
安装kubelet、kubeadm、kubectl
所有机器配置k8s的yum源地址及安装并启动kubelet。
配置k8s的yum源地址
cat <<EOF | sudo tee /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
安装 kubelet,kubeadm,kubectl
sudo yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1
设置开机启动
sudo systemctl enable --now kubelet
kubeadm是集群部署工具
kubectl是集群管理工具,通过command来管理集群
kubelet的k8s集群每个节点的docker管理服务
拉取镜像
kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.1
配置docker版本和k8s相同
{
"registry-mirrors": [
"https://docker.1ms.run"
]
}
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.1ms.run"],"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload && systemctl restart docker
内网和公网
kubeadm init --apiserver-advertise-address=192.168.0.55 --apiserver-cert-extra-sans=14.103.31.209 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.1 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address=10.0.0.10 \ # master 节点内网 IP
service-cidr=10.96.0.0/12 \ # 服务网段(默认,勿与主机网段冲突)
pod-network-cidr=10.244.0.0/16 # Pod 网段(与后续网络插件匹配
假设你上面的ip地址写错了
清理kubectl残留
kubeadm reset -frm -rf /etc/kubernetes/*
# 1. 为 root 用户配置(若用普通用户,去掉 sudo 并按提示调整权限)
export KUBECONFIG=/etc/kubernetes/admin.conf# 2. 验证配置是否生效(执行后能看到 master 节点,状态暂时是 NotReady,正常)
kubectl get nodes
可将配置命令写入环境变量文件(永久生效):
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
安装网络插件
# 下载并应用 Calico 配置(适配之前设置的 Pod 网段 10.244.0.0/16)
kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml# 等待 3-5 分钟,再次查看节点状态(会从 NotReady 变为 Ready)
kubectl get nodes -w # -w 表示实时监控,看到 Ready 后按 Ctrl+C 退出
kubectl get pods -n kube-system | grep calico
kubectl get pod -A
其他节点加入(需要修改token和hash)这个在初始化后,会有
kubeadm join 192.168.0.55:6443 --token xvx24j.hq3ij8fuw2ft0az4 --discovery-token-ca-cert-hash sha256:c4c3d5551f45098ace7b45172ca687aed340ef1fcedc6ffe189ad39fef28657c
如果用的云,则安全组开启ui应用端口6443
这个是看默认的api的地址
kubectl cluster-info
在master节点加权限
# 创建 .kube 目录(如果不存在)
mkdir -p $HOME/.kube
# 复制集群配置文件
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 赋予当前用户权限(否则可能没有读写权限)
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl 管理nginx
先啦一个镜像
docker pull nginx
# 创建一个名为 nginx 的 Deployment,使用 nginx:latest 镜像,启动 2 个副本
kubectl create deployment nginx --image=nginx:latest --replicas=2
发现拉不起来,看错误
kubectl describe pod nginx
因为是单节点,而且这个节点是master,理论master是用来管理的,所以不能被其他pod部署在这里,造成性能影响也叫污点。她默认是不允许污点的。此时我们配置她允许污点,手动移除这个标签。(正常应该搭建集群的,作为测试,用单节点足够了)
- 命令说明:
--all
表示对所有节点操作,-
符号表示 “移除” 该污点。
kubectl taint nodes --all node-role.kubernetes.io/master-
执行后在看,发现瞬间启动了
给她整个外网映射地址,大家都知道容器内nginx默认是80
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
然后可以下,她给我分配的是哪个端口
kubectl get svc nginx
32435(对外是这个),我们把这个端口加弹性ip白名单里
本地telnet 内网ip
加完白名单,本地机器telnet公网ip通
访问测试网站,通