K8S教程
2024-10-28 14:32:21 0 举报
AI智能生成
K8S教程
作者其他创作
大纲/内容
安装
前提(每台机器都必须具备docker环境)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl disable firewalld
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
setenforce 0 # 临时关闭
关闭 swap
swapoff -a # 临时关闭
永久关闭
给N台机器分别设置主机名
hostnamectl set-hostname k8s-master
hosts(ip换成自己的[局域网地址])
将桥接的IPv4流量传递到iptables
sysctl --system # 生效
设置时间同步
yum install ntpdate -y
ntpdate time.windows.com
ntpdate time.windows.com
网宿地址:ntpdate -u misntp.wangsu.com
添加 k8s yum源
如果之前安装过k8s,先卸载旧版本
yum remove -y kubeletkubeadm kubectl
查看可以安装的版本
yum list kubelet --showduplicates | sort -r
安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install ‐y kubelet‐1.18.0 kubeadm‐1.18.0 kubectl‐1.18.0
开机启动kubelet
systemctl enable kubelet
systemctl start kubelet
systemctl start kubelet
在k8s-master机器上执行初始化操作(下载很慢,需要等待)
如果报错:端口占用。使用命令kubeadm reset重启
k8s-master机器上执行如下命令
在所有k8s node机器执行上图第三个红框里的命令
k8s-master执行如下命令:
安装pod网络插件:kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
查看状态:kubectl get nodes
在所有k8s-node上执行
命令
查看节点信息
kubectl get nodes
更新secret
更新Secret: kubectl patch secret mysql-secret -p='{"stringData": {"MYSQL_ROOT_PASSWORD": "new-password"}}'
删除需要关联的Pod: kubectl delete pods -l app=mysql
(删除后会自动创建一个新的pod来应用新的secret)
查看资源状态
kubectl describe -h
垃圾收集
配置将在磁盘使用超过85%时启动垃圾收集,并在磁盘使用下降到80%以下时停止垃圾收集
kubelet --image-gc-high-threshold=85 --image-gc-low-threshold=80
滚动升级
kubectl set image deployment my-tomcat tomcat=tomcat:8.0.41-jre8-alpine
如果新旧镜像一样,不会更新!
kubectl rollout restart deployment workflow-deployment
如果新旧镜像一样,也会更新!
如何解决容器启动,但是应用还未完全启动,导致的访问404异常?
解决方案:就绪探针
如何解决当容器关闭时,将已经接收到流量处理完,再彻底关闭应用?
解决方案:terminationGracePeriodSeconds
添加滚动升级策略
如何监控容器发生异常?
解决方案,添加存活探针
版本回滚
查看历史版本
kubectl rollout history deploy my-tomcat
回退到上一个版本
kubectl rollout undo deployment my-tomcat #--to-revision 参数可以指定回退的版本
删除清单的所有资源
kubectl delete -f my-resources.yaml
删除一个具体资源
kubectl delete deployment my-deployment
进入pod
pod中只有一个容器
kubectl exec -it <pod-name> -- /bin/sh
pod中有多个容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh
命名空间
创建命名空间
kubectl create namespace my-namespace
查看指定命名空间下资源
查看所有命名空间下的资源
kubectl get svc,pc,pvc,pod --all-namespaces
给节点加标签
加标签
kubectl label nodes k8s-node1 node-group=test
kubectl label nodes k8s-node2 node-group=test
kubectl label nodes k8s-node2 node-group=test
使用标签
查看标签
kubectl get nodes -l node-group=test
强制删除一个pod
kubectl delete pod <pod-name> --grace-period=0 --force -n <namespace>
将一个notReady的node变成正常node
(在异常node上执行)systemctl restart kubelet
强制删除pv和pvc
一般步骤:先删除pod,再删除pvc,最后删除pv!如何删除pvc卡住了,状态是Terminating,应该执行如下步骤删除
解决步骤
直接删除k8s中的记录
然后正常删除pvc
存储
nfs的安装
安装nfs服务器
安装必要的软件包:sudo yum install nfs-utils
创建一个你希望通过NFS共享的目录
sudo mkdir /var/nfs_share
更改该目录的权限
sudo chmod 755 /var/nfs_share
启动rpcbind和nfs
systemctl start rpcbind
systemctl start nfs
systemctl start nfs
配置三个节点读写NFS共享目录
vi /etc/exports
/var/nfs_share k8s-master(rw,sync,no_subtree_check)
/var/nfs_share k8s-node1(rw,sync,no_subtree_check)
/var/nfs_share k8s-node2(rw,sync,no_subtree_check)
/var/nfs_share k8s-master(rw,sync,no_subtree_check)
/var/nfs_share k8s-node1(rw,sync,no_subtree_check)
/var/nfs_share k8s-node2(rw,sync,no_subtree_check)
导出目录
exportfs -ar
启动NFS服务并设置为开机启动
sudo systemctl start nfs
sudo systemctl enable nfs
sudo systemctl enable nfs
设置nfs客户端
安装必要软件包
yum install nfs-utils
创建挂载目录
mkdir /mnt/nfs_share
挂载NFS共享的目录
mount -t nfs k8s-node3:/var/nfs_share /mnt/nfs_share
配置重启生效
vi /etc/fstab
k8s-node3:/var/nfs_share /mnt/nfs_share nfs defaults 0 0
k8s-node3:/var/nfs_share /mnt/nfs_share nfs defaults 0 0
构建一个pv
构建一个pvc
如何剔除一个node
将节点标记为不可调度
kubectl cordon <node-name>
驱逐或删除现有的 Pod
kubectl drain <node-name>
从集群中删除节点
kubectl delete node <node-name>
清理节点
k8s安装jenkins
清单文件
配置集群(系统管理-节点管理-clouds)
配置kuberneter Cloud details
Kubernetes 地址
https://kubernetes.default.svc.cluster.local
也可以填写自己的master地址+6443端口
Jenkins 地址
http://jenkins:8080
其中jenkins就是jenkins的service名称
Jenkins 通道
jenkins-agent:50000
Pod Labels
键:jenkins
值:slave
如何在jenkins中加上k8s的认证
配置pod模版
模版名称:slave-pipeline
命名空间
default
标签列表
slave-pipeline
添加四个docker容器(这个pod里面就有四个docker容器)
第一个jnlp
名称:jnlp
Docker镜像:jenkins/inbound-agent
工作目录:/home/jenkins/agent
分配伪终端:是
第二个docker(用来打包镜像和上传镜像)
名称:docker
镜像:docker
工作目录:/home/jenkins/agent
运行命令:/bin/sh -c
命令参数:cat
分配伪终端:是
第三个maven(用来打包后端项目)
名称:maven
Docker镜像:maven:3.8.1-openjdk-8
工作目录:/home/jenkins/agent
运行命令:/bin/sh -c
命令参数:cat
分配伪终端:是
第四个node(用来编译前端项目)
名称:node
docker镜像:node:16.6.1-slim
工作目录:/home/jenkins/agent
运行命令:/bin/sh -c
命令参数:cat
分配伪终端:是
添加卷
第一个:Persistent Volume Claim(用来做jar目录,加速编译)
申明值:maven-pvc
挂载路径:/root/.m2/repository
第二个:Config Map Volume(用来制定自己的maven配置)
Config Map 名称
maven-config
挂载路径:/root/.m2
第三个:Host Path Volume(用来使用系统docker)
主机路径:/var/run/docker.sock
挂载路径:/var/run/docker.sock
第四个:Host Path Volume
主机路径:/root/.kube
挂载路径:/home/jenkins/agent/.kube
第五个:Host Path Volume(使用docker命令的)
主机路径:/usr/bin/docker
挂载路径:/usr/bin/docker
第六个:Host Path Volume(前端node包缓存,暂时没有生效)
主机路径:/root/.npm
挂载路径:/root/.npm
配置gitlab的凭证
用户名
密码
ID(这个在pipeline中需要)
配置pipeline项目
如何在jenkins中使用kubectl命令
添加k8s凭证
在节点管理中加入凭证,连接到k8s
将k8s的配置映射到pod中
在pod中安装kubectl命令行
1、下载对应版本的kubectl文件
编写Dockerfile文件
将编译好的镜像上传到自己的仓库中
在节点管理的pod模版中加一个kubectl容器
一个标准的web应用清单
配置ingress
安装ingress-controller(直接部署清单文件)
使用路径来匹配service
配置证书:
方式一
将证书和密钥转成base64编码
将上述命令产生的输出值分别复制到下面清单的 tls.crt 和 tls.key 对应的位置
kubectl apply -f /path/to/your/secret.yaml
方式二
kubectl create secret tls my-tls-secret --key tls.key --cert tls.crt -n your-namespace
配有证书ingress清单的示例
centos自签证书
安装openssl
生成私钥
生成证书签名请求(CSR)
生成自签名SSL证书
动态添加节点
准备新的工作节点:安装docker和k8s环境
新节点加入到集群
验证新节点的状态
k8s安装mysql主从复制
更新k8s集群的证书
查看所有证书的有效性
自动更新所有已过期的证书:
备份证书
为防止更新证书等操作失败,关键操作前一定要进行备份。备份 /etc/kubernetes 目录
更新 ~/.kube/config 文件
重启 kube-apiserver,kube-controller,kube-scheduler,etcd 这4个容器
0 条评论
下一页