k8s部署详细说明
k8s部署详细说明
架构图说明
1 准备环境
1.1 服务器要求:
建议最小硬件配置:2核CPU、2G内存、20G硬盘 服务器最好可以访问
外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点
1.2 软件环境:
软件 版本 | 操作系统 |
---|---|
CentOS7.9_x64 | $mini |
Docker | ce-20.10.17-3 |
Kubernetes | 1.23 |
1.3 服务器规划:
项目 | Value |
---|---|
master | 192.168.1.1 |
node1 | 192.168.1.2 |
node2 | 192.168.1.3 |
2 主机名解析(以下命令 所有节点都要执行)
编辑三台服务器的 /etc/hosts 文件 ,添加下面内容(master是主机名,可以自定义,原则是ip对应着主机名字):
192.168.1.1 master
192.168.1.2 node1
192.168.1.3 node2
2.1自定义主机名的命令
hostnamectl set-hostname node1(node1是自定义的)
3 时间同步
#启动chronyd服务
#ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#ntpdate -u ntp.aliyun.com && date
systemctl start chronyd
systemctl enable chronyd
date
yum -y install ntp
ntpdate pool.ntp.org
systemctl start ntpd
date
4 禁用selinux和firewalld服务
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效
5 禁用swap分区
free -m #查看状态
swapoff -a #临时
sed -ri "s/.swap./#&/" /etc/fstab #永久,重启后生效
6 添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system #配置应用
7 安装docker
7.1 安装docker依赖
yum install -y yum-utils
7.2 设置docker仓库镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7.3 安装制定版本的docker
yum -y install docker-ce-20.10.17-3.el7
7.4 查看是否安装成功
yum list installed | grep docker
7.5 如果安装太高版本需要进行卸载再进行安装指定的版本(如果是20.10.17-3就不需要卸载重装了)
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
yum -y install docker-ce-20.10.17-3.el7
7.6 设置置docker开机启动
systemctl enable docker && systemctl start docker
7.7 配置docker 镜像加速器
cat <<EOF> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://hub-mirror.c.163.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
}
EOF
#vi /etc/docker/daemon.json
#输入以下内容
#{
# "registry-mirrors:#["https://rsbud4vc.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
# "exec-opts":["native.cgroupdriver=systemd"]
#}
7.8 重启docker
systemctl restart docker
8 设置kubernetes镜像为国内的
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
9 安装指定版本 kubeadm,kubelet和kubectl
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
9.1 设置kubelet开机启动
systemctl enable kubelet
#查看kubelet日志
journalctl -xefu kubelet
10、部署主节点(仅在主节点执行该命令)
kubeadm init \
--apiserver-advertise-address=192.168.1.1 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致
10.1 创建必要的文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
10.2 从节点执行添加的命令,这个加入命令是主节点初始化完成后生成的
kubeadm join 192.168.2.1:6443 --token pgky90.8bvtgc8y201aw9cs --discovery-token-ca-cert-hash sha256:7a29ef807f5e4a8479e77a9f497ffa6bd28718fe70a69d589cbdc4cf278dc471
10.3 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token
kubeadm token create --print-join-command
11、部署容器网络(CNI),这个给各个组件进行通信使用的
可以通过链接下载,下载不了从我分享的百度云链接进行下载。
wget https://docs.projectcalico.org/manifests/calico.yaml
链接:https://pan.baidu.com/s/1JCY5m9_26sogfdc5bo1RZw
提取码:uyge
11.1 创建CNI
kubectl apply -f calico.yaml
11.2 查看节点状态,在主节点上执行
kubectl get nodes
kubectl get pod -A
11.3 查看通信状态
kubectl get pods -n kube-system -w(-w可以不带)
12、创建测试的应用
vi nginx.yaml
在 nginx.yaml粘贴以下内容
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
创建nginx应用
kubectl apply -f nginx.yaml
创建nginx外网服务应用
vi nginx-service.yaml
输入
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
创建nginx外网服务应用
kubectl apply -f nginx-service.yaml
浏览器打开nginx启动页,出现以下页面说明成功
部署mysql的脚本:
apiVersion: apps/v1
kind: Deployment #
metadata:
name: mysql #名称,全局唯一
namespace: default # 默认空间
spec:
replicas: 1 #Pod 副本的期待数量
selector:
matchLabels:
app: mysql # 符合目标的Pod拥有此标签
template: # 根据此模版创建Pod的副本
metadata:
labels:
app: mysql # Pod副本拥有的标签,对应Selector
spec:
containers: # Pod的内容的定义部分
- name: mysql # 容器的名称
image: mysql # 容器对应的Docker Image
ports:
- containerPort: 3306 # 容器应用监听的端口号
env:
- name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码
value: "123456" # 设置mysql的初始化密码
---
apiVersion: v1
kind: Service # 表明是Kubernetes Service
metadata:
name: mysql # Service 的全局唯一名称
spec:
type: NodePort
selector:
app: mysql
ports: # Service 提供服务的端口
- port: 3306 # Service 对应的Pod拥有这里定义的标签
targetPort: 3306
nodePort: 30306
12 移除节点,扩展知识(这一步,不要执行)
12.1 在主节点执行
kubectl drain node1 --delete-local-data --force --ignore-daemonsets
12.2 删除节点
kubectl delete node node1
12.3 重启kubeadm (有报错自己百度)
kubeadm reset
输入y
13、集群重启
systemctl status kubelet
#首先检查服务是否启动有无报错,查看状态是否是running
#重新声明环境变量
ll /etc/kubernetes/admin.conf
#查看文件是否存在,如果不存在执行下面的步骤
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
#重新写入环境变量
source ~/.bash_profile
#containerd容器解决方案
#尝试重启kubelet测试是否可以重新恢复正常
systemctl restart kubelet
#查看kubelet的日志,里面寻找相应报错
journalctl -xefu kubelet
#根据iomp版本是用docker或者nerdctl,来查看k8s容器状态
nerdctl -n k8s.io ps
#首先确认aip-server有没有挂,如果挂了去查看日志
nerdctl -n k8s.io ps | grep kube-apiserver
docker ps -a | grep kube-apiserver
cd /var/log/pods/kube-system_kube-apiserver #根据相应日志去处理对应问题
#接着确认etcd是否挂了,可以去查看相应的报错日志
docker ps -a | grepetcd
nerdctl -n k8s.io ps | grep etcd
cd /var/log/pods/kube-system_etcd #根据相应日志去处理对应问题
安装kuboard的官方链接(小公司推荐这个去管理k8s集群。rancher比较耗费资源,而且主机重启坑比较多):
https://kuboard.cn/install/v3/install-in-k8s.html
更多推荐
所有评论(0)