安装
前提(每台机器都必须具备docker环境)
关闭防火墙
systemctl stop firewalld<br>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<br>ntpdate time.windows.com<br>
网宿地址: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<br>systemctl start kubelet<br>
在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"}}'<br>
删除需要关联的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<br>
滚动升级
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<br>
删除一个具体资源
kubectl delete deployment my-deployment<br>
进入pod
pod中只有一个容器
kubectl exec -it <pod-name> -- /bin/sh<br>
pod中有多个容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh<br>
命名空间
创建命名空间
kubectl create namespace my-namespace<br>
查看指定命名空间下资源
查看所有命名空间下的资源
kubectl get svc,pc,pvc,pod --all-namespaces
给节点加标签
加标签
kubectl label nodes k8s-node1 node-group=test<br>kubectl label nodes k8s-node2 node-group=test<br>
使用标签
查看标签
kubectl get nodes -l node-group=test<br>
强制删除一个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
如何剔除一个node
将节点标记为不可调度
kubectl cordon <node-name><br>
驱逐或删除现有的 Pod
kubectl drain <node-name><br>
从集群中删除节点
kubectl delete node <node-name><br>
清理节点
配置ingress
安装ingress-controller(直接部署清单文件)
使用路径来匹配service
配置证书:
方式一
将证书和密钥转成base64编码
将上述命令产生的输出值分别复制到下面清单的 tls.crt 和 tls.key 对应的位置
kubectl apply -f /path/to/your/secret.yaml<br>
方式二
kubectl create secret tls my-tls-secret --key tls.key --cert tls.crt -n your-namespace<br>
配有证书ingress清单的示例
centos自签证书
安装openssl
生成私钥
生成证书签名请求(CSR)
生成自签名SSL证书
更新k8s集群的证书
查看所有证书的有效性
自动更新所有已过期的证书:
备份证书
为防止更新证书等操作失败,关键操作前一定要进行备份。备份 /etc/kubernetes 目录
更新 ~/.kube/config 文件
重启 kube-apiserver,kube-controller,kube-scheduler,etcd 这4个容器