k8s 安装
安装k8s推荐使用kuboard的一键安装脚本:https://kuboard.cn/install/install-k8s.html 根据文档指导进行安装。
备注:如果使用了harbor私服,那么往集群中添加了新的机器后,记得配置新机器的ca证书
StatefulSet 可以使用 Headless Service 来控制其 Pod 所在的域。该域(domain)的格式为 $(service name).$(namespace).svc.cluster.local,其中 “cluster.local” 是集群的域。
StatefulSet 中 Pod 的 hostname 格式为 $(StatefulSet name)-$(Pod 序号)
StatefulSet 中每一个 Pod 将被分配一个 dnsName,格式为: $(podName).$(所在域名)。如:inner-nginx-0.inner-nginx.inner-server.svc.cluster.local
手动安装注意事项
如果想要手动安装k8s,可以参考kuboard的安装脚本,按顺序手动执行脚本中的命令即可。
如果安装时没有参考kuboard的安装脚本,记得安装之前一定要修改 /etc/sysctl.conf
否则无法正常的进行集群内通信,ingress也会不停的启动失败。修改方式如下(从kuboard的安装脚本中摘抄的):
1 | # 如果有配置,则修改 |
多网卡注意事项
如果机器有多张网卡,calico网络注册时有可能会注册到其它网卡。导致 calico-node 创建失败,此时可以用环境变量指定网卡。方式如下:
编辑calico-node
在工作容器calico-node
中添加环境变量IP_AUTODETECTION_METHOD=interface=enp.*
centos 一键安装docker和K8S
访问 https://kuboard.cn/install/install-k8s.html#%E5%AE%89%E8%A3%85docker%E5%8F%8Akubelet 确认并勾选7个复选框后,会出现一键安装自动脚步。复制并执行即可。centos 单独安装k8s
复制下面的命令,从阿里镜像源安装K8S1
2
3
4
5
6
7
8
9
10
11
12
13cat <<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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet其它系统安装k8s可参考:https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.3e221b11yZ0SdT
k8s 常用命令
1 | #设置节点为不可调度 |
一些常用命令可通过help查看,如 kubectl cp --help
可查看cp命令的使用方法。另外还可参考该博客: https://www.jianshu.com/p/fa2d827ac725
k8s对象管理常用命令:https://kuboard.cn/learning/k8s-intermediate/obj/manage.html#%E7%AE%A1%E7%90%86%E6%96%B9%E5%BC%8F
service selector应与Pod的标签匹配
service的 targetPort 应与Pod中容器的 containerPort 匹配
service的端口可以是任何数字。多个服务可以使用同一端口,因为它们分配了不同的IP地址。
ingress的 servicePort 应该匹配 service 的 port
serivce的名称应与 ingress 中的 serviceName 字段匹配
获得节点join命令(添加新节点用):
1 | # 只在 master 节点执行 |
切换命名空间
1 | # 查看所有命名空间 |
kubectl delete pod 容器组名称 -n 命名空间
1 | # 强制删除特定pods |
kubectl delete pods pod名称 -n 命名空间 –grace-period=0 –force
1 | # 删除集群中失败的pods |
kubectl get pods –field-selector=status.phase=Failed –all-namespaces |awk ‘{ system(“kubectl delete pod “$2” -n “$1) }’
1 | # 强制删除Terminating状态的pods |
kubectl get pods –all-namespaces |grep Terminating|awk ‘{ system(“kubectl delete pod “$2” -n “$1” –grace-period=0 –force”) }’
1 |
|
kubectl delete deployment deployment名称 -n 命名空间
1 |
|
kubectl apply -f nginx-deployment.yaml
1
- 方法2:使用 edit 命令更新
更新 inner-harbor 命名空间的名称为 harbor-harbor-ingress 的 ingress(像使用vi命令一样编辑保存即可)
kubectl edit ingress harbor-harbor-ingress -n inner-harbor
- 其它: 使用 set 命令更新(没用过,挺麻烦想用的话百度吧);或者使用图形管理界面。
# ingress配置websocket
为ingress添加注解`nginx.org/websocket-services`,并将该注解的值设置为当前部署的服务名(service name)。
# ingress配置上传文件大小限制
为ingress添加注解`nginx.org/client-max-body-size`,如`10m`限制为10M大小,若值设置为`0`则代表不限制大小。
kuboard调试:https://kuboard.cn/learning/k8s-advanced/ts/application.html#debugging-pods
# k8s 几种service的区别
## 不创建service
不会分配集群service IP,也不会解析集群域名。只能通过分配的pod IP地址访问。
## Headless
不会分配集群service IP,但是可以解析集群域名,域名会被解析到所有的pod ip。可以通过集群域名和pod ip进行访问。
## ClusterIP
会分配集群service IP,也可以解析集群域名,域名会解析到service ip,通过service ip 负载均衡到每一个pod。可以通过service ip、集群域名、pod ip 进行访问。
## NodePort
具备 ClusterIP 模式的所有特性,并且会将 service ip 的端口映射到节点宿主机。除了具备 ClusterIP 的所有访问方式,还可通过节点宿主机的端口访问。
# workDir
Dockerfile中的WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行,相当于设置容器的工作目录了。
# command和args注意事项
在kuboard中添加command自定义启动命令或args自定义参数时,如果命令很长有多个参数,不能直接把全部的整行命令复制粘贴过去,要每个参数都添加一项。如:`java -jar /app.jar` 要添加三项,分别为 `java` `-jar` `/app.jar`才可以。(或者直接编辑yaml配置文件)**命令在实际执行时,多个参数之间是用空格隔开的,用空格隔开就代表多个参数。每个参数都要点加号,添加一项。**
(完)