包头做网站,微商城运营的主要工作,免费可以做旅游海报 的网站,本地部署 wordpress安装kubeadm、kubectl、和 kubelet
这里通过百度网盘下载所需要的安装包#xff1a;
链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000
1、下载部署包到本地后#xff0c;在k8s部署包/k8s目录下
执行此yum命令安装#xff1a;yum localinstall ./*.r…安装kubeadm、kubectl、和 kubelet
这里通过百度网盘下载所需要的安装包
链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000
1、下载部署包到本地后在k8s部署包/k8s目录下
执行此yum命令安装yum localinstall ./*.rpm 或 rpm -Uvh *.rpm --nodeps --force
2、在 /etc/sysconfig/kublet 中增加自定义 kubelet 配置
# 设置hostname
hostnamectl set-hostname master
mkdir -p /home/work/kubernetes/log
mkdir -p /home/work/kubernetes/kubelet_data
mkdir -p /home/work/docker
# 自定义kublet配置
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS --hostname-overridemaster --logtostderrfalse --log-dir/home/work/kubernetes/log --v0\
--root-dir/home/work/kubernetes/kubelet_data
3、设置 kubelet 开机启动
systemctl enable kubelet systemctl start kubelet
docker安装
1、rpm包在k8s部署包/docker目录下
2、切换到该目录下安装
yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force
4、若是GPU机节点需要安装nvidia-dcoker
1、切到k8s部署包/docker/nvidia-dcoker目录下
3、在该目录下执行
rpm -Uvh *.rpm --nodeps --force
4、sudo systemctl restart docker
5、修改docker配置包括cgroup和仓库地址
vim /etc/docker/daemon.json
# gpu机器:
{
runtimes: {
nvidia: {
path: nvidia-container-runtime,
runtimeArgs: []
}
},
registry-mirrors: [https://23h04een.mirror.aliyuncs.com],
exec-opts: [native.cgroupdriversystemd],
default-runtime: nvidia,
storage-driver: overlay2,
storage-opts: [
overlay2.override_kernel_checktrue
]
}
# cpu机器:
{
exec-opts: [native.cgroupdriversystemd]
}
6、修改docker服务参数增加docker配置文件指定docker数据文件目录
vim /etc/kubernetes/docker_opts.env
DOCKER_OPT_IPMASQ--ip-masqtrue
DOCKER_OPT_MTU--mtu1372
DOCKER_OPTS --ip-masqtrue --mtu1372 --data-root/home/work/docker
vim /usr/lib/systemd/system/docker.service (EnvironmentFile 对应上面的文件绝对路径)
EnvironmentFile/etc/kubernetes/docker_opts.env
ExecStart/usr/bin/dockerd $DOCKER_OPTS -H fd:// --containerd/run/containerd/containerd.sock
#ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock
7、重启docker设置开机启动
systemctl daemon-reload
systemctl restart docker
nfs准备
安装nfs配置挂载
先进入到k8s部署包/nfs-utils目录下
执行命令安装yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force
# 创建本地目录
mkdir /cfs
# 挂载远程目录到本地
mount -t nfs4 -o minorversion1,rsize1048576,wsize1048576,hard,timeo600,retrans2,noresvport cfs-PJ5X3SRg7M.lb-d065a956.cfs.bj.baidubce.com:/ /cfs
# 设置开机启动
systemctl enable nfs.service
更改服务器配置
1. 关闭防火墙和selinux
[rootcentos7 ~] systemctl stop firewalld systemctl disable firewalld
# 永久关闭selinux
[rootcentos7 ~] sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config cat /etc/selinux/config
# 临时关闭selinux
rootcentos7 ~] setenforce 0
1. 禁用swap
# 临时禁用
[rootmaster ~] swapoff -a
# 永久禁用
[rootmaster ~] sed -i.bak /swap/s/^/#/ /etc/fstab
1. 内核参数修改
部署的 k8s 网络使用 flannel该网络需要设置内核参数 bridge-nf-call-iptables1
# 临时修改
[rootmaster ~] sysctl net.bridge.bridge-nf-call-iptables1
net.bridge.bridge-nf-call-iptables 1
[rootmaster ~] sysctl net.bridge.bridge-nf-call-ip6tables1
net.bridge.bridge-nf-call-ip6tables 1
# 永久修改
[rootmaster ~] cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
EOF
[rootmaster ~] sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
1. 处理依赖的docker镜像
所需要的镜像为
registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.5
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.5
registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.5
registry.aliyuncs.com/google_containers/kube-proxy:v1.23.5
registry.aliyuncs.com/google_containers/pause:3.6
registry.aliyuncs.com/google_containers/etcd:3.5.1-0
registry.aliyuncs.com/google_containers/coredns:v1.8.6
在k8s部署包/images下逐个docker load -i 导入镜像。
kubeadm启动集群
1. 初始化
kubeadm reset -f
若是之前已经创建集群
* 删除/root/.kube/config文件
* 若是安装了flannel网络删除 /etc/cni/net.d/ 下的flannel网络文件10-flannel.conflist
如果报错[ERROR FileExisting-conntrack]: conntrack not found in system path
解决办法先下载yum install --downloadonly --downloaddir/home/conntrack conntrack
安装到目标服务器上rpm -Uvh *.rpm --nodeps --force
1. 通过命令参数初始化集群
kubeadm init --kubernetes-versionv1.23.5 --pod-network-cidr10.244.0.0/16 --service-cidr10.96.0.0/12 --ignore-preflight-errorsSwap --apiserver-advertise-address10.132.130.197 --image-repository registry.aliyuncs.com/google_containers --v5
# apiserver-advertise-address 必须填充ip
1. 修改kubectl配置
把 kubectl 所需的 apiserver 服务地址和证书配置添加到环境变量中否则会无权限访问 6443 端口
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
cp -p $HOME/.bash_profile $HOME/.bash_profile.bak$(date %Y%m%d%H%M%S)
echo export KUBECONFIG$HOME/.kube/config $HOME/.bash_profile
source $HOME/.bash_profile
4、配置环境变量
export KUBECONFIG/etc/kubernetes/admin.conf
5、flannel网络搭建
需要的yaml文件kube-flannel.yml
对应的镜像
docker.io/flannel/flannel:v0.21.4
docker.io/flannel/flannel-cni-plugin:v1.1.2
在k8s部署包/flannel下
先docker load -i 导入镜像然后执行下面命令
kubectl apply -f kube-flannel.yml
如果 flannel 的 pod 无法启动显示 CrashLoopBackOff。通过 kubectl logs 显示 node“master“podcidr not assigned 错误有两种解决方法
1安装 kubeadm Init的时候没有增加 --pod-network-cidr 10.244.0.0/16 参数
注意安装Flannel时kubectl create -f https://bd.bcebos.com/datahub-online/k8s/kube-flannel.yml 如果 yml 中的 Network: 10.244.0.0/16和--pod-network-cidr 不一样就修改成一样的。不然可能会使得Node间Cluster IP 不通。
如果你没有快照可以还原采用方法2然后 kubectl delete pod -n kube-system kube-flannel-* 将错误的 flannel-pod 删除即可自动重新创建新的 flannel-pod。
如果你有恢复快照那么在 kubeadm init 时加上 --pod-network-cidr10.244.0.0/16 参数重新 init 即可。
在搭建完 flannel 网络后把 coredns 的 pod 删了自动重启一下应该就可以 running 了
6、节点加入集群
* 首先k8s集群的node节点同按照上述去安装kubeadmin、kubectl和kubelet安装docker更改服务器配置安装nfs挂载服务
* node节点上不需要去部署集群只需要安装好k8s的基础环境即可
* 再master节点上运行
kubeadm token create --print-join-command
kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35
在希望加入集群的节点执行上面命令输出的语句
在node节点上运行 kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35 即可加入集群中
注意这里如果之前节点已经加入过集群了需要做一些清理工作否则加入不成功
重新初始化集群kubeadm -f reset
清理网络ifconfig查看网络清理之前加入的网络否则加入集群不成功
sudo ifconfig cni0 down
sudo ip link delete cni0
安装插件
1. 安装nvidia-device-plugin插件使用gpu
1、在k8s部署包/nvidia-device-plugin文件下
2、在Gpu机器上导入镜像docker load -i nvidia/k8s-device-plugin:1.0.0-beta6.tar
3、kubectl create -f nvidia-device-plugin.yml
1. 训练调度kube-queue的安装和使用
之前的基于k8s的调度是基于java单独写的一套他需要不停的轮询队列去查信息进行调度存在以下问题
1. 与业务代码耦合通用性差可移植性差
2. 持续轮询有性能瓶颈
3. 稳定性不高
基于此我们引入了新的队列kube-queue他基于k8s的informer机制进行时间监听和执行kube-queue已经过大规模平台验证稳定性比较高我们通过编写不同的extender就可以支持job、tf-job、pytorch-job、mxnet-job等多个类型。
1安装helm
1、在/k8s部署包/kube-queue文件夹下
2、解压tar -zxvf helm-v3.9.3-linux-amd64.tar.gz
cp helm /usr/local/bin
# helm是一个可执行的二进制文件可以直接执行若是想全局执行将文件复制到/usr/local/bin下
2)安装kube-queue
参考http://agroup.baidu.com/zhongce_saas/md/article/4816652
1、在/k8s部署包/kube-queue文件夹下
2、解压tar -zxvf kube-queue.tar.gz
3、cd kube-queue
修改charts/v0.1.0/templates/controller.yaml镜像拉取策略为Never
# 通过helm安装
4、helm install kube-queue -n kube-system ./charts/v0.1.0
#查看kube-queue-controller和job-extension进程是否存在
5、helm get manifest kube-queue -n kube-system | kubectl get -n kube-queue -f -
# 通过helm卸载kube-queue
6、helm uninstall kube-queue -n kube-system
3、NFS Server安装 K8S适配NFS
1NFS Server安装
参考搭建NFS Server_山间漫步人生路的博客-CSDN博客
# 安装nfs server
在k8s部署包/nfs目录下安装rpm -ivh *.rpm --force --nodeps
docker load -i busybox.tar
# 启动nfs server 设置开机自启
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
# 创建共享目录
mkdir -p /nas/k8s
chmod -R 777 /nas/k8s
# 设置共享目录
vim /etc/exports
/nas/k8s 192.168.3.0/24(insecure,rw,sync,no_root_squash)
exportfs -a # 使exports的修改生效
# 将共享目录挂载到其他服务器需要已安装nfs-utils
mount -t nfs 10.132.130.197:/nas/k8s /nas/k8s
# 设置开机自挂载编辑/etc/fstab,增加一条挂载记录
vim /etc/fstab
192.168.3.81:/nas/k8s /data nfs defaults 0 1
2)nfs-provisioner 插件安装
参考http://agroup.baidu.com/zhongce_saas/md/article/4826066
需要的镜像在k8s部署包/nfs文件夹下。
在k8s部署包/nfs下导入镜像docker load -i nfs-provisioner.tar
# 解压
tar -xvf nfs-provisioner_file.tar
cd nfs-provisioner/nfs-subdir-external-provisioner
# 设置namespace的rbac权限
NS$(kubectl config get-contexts|grep -e ^\* |awk {print $5})
NAMESPACE${NS:-default}
sed -i s/namespace:.*/namespace: $NAMESPACE/g ./deploy/rbac.yaml ./deploy/deployment.yaml
kubectl create -f deploy/rbac.yaml
如有报错参考Error from server: Get “https://[::1]:6443/api/v1/namespaces/victor/resourcequotas“: dial tcp [::1]:_get https://[::1]:6443/api/v1/namespaces/kube-sys_victorgk的博客-CSDN博客
配置 NFS subdir external provisioner的deploy/deployment.yaml设置nfs地址和路径并执行部署的时候需要指定对应的ns并部署到指定机器上。编辑deployment.yaml修改nfs-server的地址和共享目录
kubectl create -f deploy/deployment.yaml
执行deploy/class.yaml ,定义了NFS子目录外部提供给Kubernetes的存储目录的存储类
cd nfs-provisioner/nfs-subdir-external-provisioner
kubectl apply -f deploy/class.yaml
测试
# 创建pod,查看创建的pvc是否分配到了nfs共享目录中
kubectl create -f deploy/test-claim.yaml -f deploy/test-pod.yaml
kubectl delete -f deploy/test-pod.yaml -f deploy/test-claim.yaml
4、ingress-controller安装
参考http://agroup.baidu.com/zhongce_saas/md/article/4890077
1、需要的tar包ingress-nginx.tar.gz
2、镜像
registry.baidubce.com/datahub/ingress-nginx-controller:v1.2.0
registry.baidubce.com/datahub/ingress-nginx-kube-webhook-certgen:v1.1.1
registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
3、tar包和镜像都在/k8s部署包/ingress-controller下
4、解压tar -zxvf ingress-nginx.tar.gz
5、依次使用docker load -i导入上面的镜像
6、cd ingress-nginx
# 需要修改的地方deploy.yaml
# externalTrafficPolicylocal - externalTrafficPolicy: Cluster
# 如果改成Cluster, 含有kube-proxy进程的机器都可以通过端口访问。Local的话只能部署ingress-controller的那台机器可以访问。
# Service的type改成NodePort
# 安装
7、kubectl apply -f deploy.yaml
5、分布式任务的安装和使用
1、在/k8s部署包/分布式任务下
3、解压tar -xvf training-operator.tar
4、cd training-operator
docker load -i training-operator.tar
5、kubectl apply -k manifests/overlays/standalone
6、filebeat安装
1、需要的包在/k8s部署包/filebeat下
2、解压tar -zxvf filebeat-7.13.0-zhongcesaas.tar.gz
3、cd filebeat
# 修改的地方filebeat/values.yaml修改es的地址,docker
---
daemonset:
# Annotations to apply to the daemonset
annotations: {}
# additionals labels
labels: {}
affinity: {}
# Include the daemonset
enabled: true
# Extra environment variables for Filebeat container.
envFrom: []
# - configMapRef:
# name: config-secret
extraEnvs: []
# - name: MY_ENVIRONMENT_VAR
# value: the_value_goes_here
extraVolumes:
- name: extras
hostPath:
path: /home/work/docker/containers
type: DirectoryOrCreate
extraVolumeMounts:
- name: extras
mountPath: /home/work/docker/containers
readOnly: true
hostNetworking: false
# Allows you to add any config files in /usr/share/filebeat
# such as filebeat.yml for daemonset
filebeatConfig:
filebeat.yml: |
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*-job-*.log
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: /var/log/containers
output.elasticsearch:
host: ${NODE_NAME}
hosts: ${ELASTICSEARCH_HOSTS:10.138.117.28:8200}
# 创建namespace
kubectl create ns logs
# 指定ns安装
helm install filebeat -n logs filebeat/
# 卸载
helm uninstall filebeat -n logs
注意点es的地址需要配置对否则连接不上es
7、job-extension安装
1、需要的yaml文件job-extension.yaml
tar包job-extension-vtest2.tar
2、在/k8s部署包/job-extension下
导入镜像docker load -i job-extension-vtest2.tar
3、kubectl apply -f job-extension.yaml
8、设置任务优先级资源
1、在/k8s部署包/job-extension下
2、kubectl apply -f priorityclass.yaml
生成ca证书脚本
export clientcert$(grep client-cert ~/.kube/config |cut -d -f 6)
export certauth$(grep certificate-authority-data ~/.kube/config |cut -d -f 6)
export clientkey$(grep client-key-data ~/.kube/config |cut -d -f 6)
echo $clientcert | base64 -d ./client.pem
echo $clientkey | base64 -d ./client-key.pem
echo $certauth | base64 -d ./ca.pem
7、部署node节点参考
k8s 集群新增 Node 文档
8、k8s集群默认存在污点策略NoSchedulemaster节点不会被调度到。如果需要master节点被调度则需要做去除操作
kubectl taint nodes --all for-node-role.kubernetes.io/master:NoSchedule-
参考k8s污点策略与容忍的简单应用_prefernoschedule_xhredeem的博客-CSDN博客