k8s常用操作 (一) ---根据上一篇文章用到写的 不全
k8s常用操作 (一)
---------------------------------上一篇文章用到的 地址就是这个-------------------
---------------------------------上一篇文章用到的 地址就是这个-------------------
---------------------------------上一篇文章用到的 地址就是这个-------------------
配置文件参数
[root@k8s-master01 ~]# vim /root/kubeadm-config.yaml
---
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: 7t2weq.bjbawausm0jaxury
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint: #在此节点上要部署的 API 服务器的端点
advertiseAddress: 192.168.28.130 # Master01 的ip地址
bindPort: 6443 #本来两个端口应该都是16443,但是负载均衡+高可用占用了,这里用6443进行端口转发。
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock # 如果使用的是默认的 Docker CRI,路径应该是 unix:///var/run/docker.sock。必须确定使用了 cri-dockerd,则需要确保它已正确安装并启动。 使用vim /etc/systemd/system/cri-docker.socket 查看自定义配置是否为ListenStream=/var/run/cri-dockerd.sock
name: k8s-master01 # Master01 的主机名
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
---
apiServer:
certSANs:
- 192.168.28.199 # VIP ip地址
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.28.199:16443 # VIP ip地址:端口
controllerManager: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #镜像仓库地址(阿里)
kind: ClusterConfiguration
kubernetesVersion: v1.28.15 # kubernetes的版本号
networking: # VIP ip地址:端口
dnsDomain: cluster.local # kubernetes的版本号
podSubnet: 172.16.0.0/16 # Pod 的网段地址
serviceSubnet: 10.96.0.0/16 # service 的网段地址
scheduler: {}
将kubelet配置成systemd作为cgroug驱动?
Kubernetes默认设置cgroup驱动(cgroupdriver) 为“systemd”,而Docker服务的cgroup驱动默认值为“cgroupfs”,建议将其修改为“systemd”,与Kubernetes保持一致。
`controlPlaneEndpoint` 用于为节点设置一个稳定的 IP 地址或 DNS 名称,它通常用于配置 API 服务器的访问信息,其实就相当于控制台后台控制面板,可以看整个集群的状态,内存CPU等,我使用Keepalived设置了高可用VIP形式 ip地址:端口一旦主节点挂掉就VIP漂移控制台漂移到从节点。`controlPlaneEndpoint` 的格式可以是一个合法的 IP 地址或者 RFC-1123 形式的 DNS 子域名,二者均可以带一个可选的 TCP 端口号。
如果没有设置 `controlPlaneEndpoint`,则使用 `advertiseAddress + bindPort`。如果设置了 `controlPlaneEndpoint`,但未指定 TCP 端口号,则使用 `bindPort
`localAPIEndpoint` 代表的是在此节点上要部署的 API 服务器的端点。它允许您定制本地 API 服务器所公布的、可访问的 IP/DNS 名称和端口。在高可用(HA)配置中,此字段与` ClusterConfiguration.controlPlaneEndpoint `的取值不同:后者代表的是整个集群的全局端点,该端点上的请求会被负载均衡到每个 API 服务器。
我的目前网段,而且我计划使用calico
ens33 是我的主要网络接口,IP 地址为 192.168.28.131/24,网关是 192.168.28.2
docker0 是 Docker 自动创建的虚拟网络接口,使用了 172.17.0.0/16 网段。
计划使用 Calico 作为 CNI 插件,Calico 默认使用 192.168.0.0/16 网段。但这个网段可能会与宿主机网络(192.168.28.0/24)冲突。为了避免冲突,我直接重新规划 Pod 网络为172.16网段,172.16.0.0/16 其实也可以用10.244.x.x ,网段10.244.0.0/16(这是 Flannel 默认使用的网段,也可以用于 Calico)。
podSubnet: 172.16.0.0/16 # Pod 的网段地址
serviceSubnet: 10.96.0.0/16 # service 的网段地址
检查k8s版本
kubeadm version
校准时间并且加到开机自启
`校准时间并且加到开机自启`
echo "*/5 * * * * ntpdate -b ntp.aliyun.com" >>/var/spool/cron/root
`修改上海时区`
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ echo 'ASia/Shanghai' > /etc/timezone
uname -r 查看内核版本
检查各节点状态
[root@k8s-master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane 2d13h v1.28.15
k8s-master02 Ready control-plane 2d13h v1.28.15
k8s-master03 Ready control-plane 2d13h v1.28.15
k8s-node01 Ready <none> 2d13h v1.28.15
k8s-node02 Ready <none> 2d13h v1.28.15
应用某个yaml配置文件
kubectl apply -f calico.yaml
pod查询
查看所有pod信息
kubectl get pods -A
查看命名空间为kube-system
里的Pod的信息
kubectl get po -n kube-system
不用:查看名为metrics-server
的pod
信息
不常用:查看命名空间为kube-system 里的,pod容器名为metrics-server的pod信息
包含不行,必须全名,后缀编号ID不shell敲。
$ kubectl get po -n kube-system -l k8s-app=metrics-server
查看包含me字母
的pod信息
查看命名空间为kube-system ,pod容器名包含me字母的pod信息
$ kubectl get pods -n kube-system | grep me
$ kubectl get pods -n kube-system | grep metrics-server
查看节点状态
kubectl top node
确定Kube-Proxy
模式 出现ipvs
四个字的输出
$ curl 127.0.0.1:10249/proxyMode
ipvs[root@k8s-master01 kubeadm-metrics-server]#
查询某个以kube开头
的pod ip
先查看所有容器,确定它的命令空间。
kubectl get pods -A
再在查询命名空间为kube-system里的所有pod的节点ip ,最后加grep进行过滤。
kubectl get pods -o wide --namespace=kube-system |grep kube-con
[root@k8s-master01 ~]# kubectl get pods -o wide --namespace=kube-system |grep kube-con
kube-controller-manager-k8s-master01 1/1 Running 6 (13h ago) 39h 192.168.28.130 k8s-master01 <none> <none>
kube-controller-manager-k8s-master02 1/1 Running 1 (39h ago) 39h 192.168.28.131 k8s-master02 <none> <none>
kube-controller-manager-k8s-master03 1/1 Running 2 (39h ago) 39h 192.168.28.132 k8s-master03 <none> <none>
查询开头为kubo
的 pod
的网段
kubectl get svc -A
kubectl get svc -n kuboard
kubectl get svc -A | grep kubo
kuboard kuboard-v3 NodePort 10.96.248.141 <none> 80:30080/TCP,10081:30081/TCP,10081:30081/UDP 15h
删除指定容器
先查到容器过滤出容器名,
kubectl get po -A | grep kubo
再删除指定容器
kubectl delete pod kuboard-v3-7979bc788f-dz4kh -n kuboard --force --grace-period=0
使用 kubectl port-forward
命令
您可以使用 kubectl port-forward
命令尝试转发一个端口到本地机器,如果该端口已经被占用,命令会报错提示端口冲突。
sh复制
kubectl port-forward <pod-name> <local-port>:<container-port> -n <namespace>
如果 <local-port>
已经被占用,您将会看到一个错误消息,例如:
Error: port <local-port> is already allocated
停止 kubectl port-forward
命令,您需要在执行该命令的终端会话中按 Ctrl+C
。这会中断端口转发进程,从而停止端口转发。
# kubectl port-forward metrics-server 443:443 -n kube-system
Error from server (NotFound): pods "metrics-server" not found
# kubectl get po -A|grep me
kube-system metrics-server-58b7c66876-z2l7v 1/1 Running 0 43h
kubernetes-dashboard dashboard-metrics-scraper-597d858d44-7698f 1/1 Running 0 43h
# kubectl port-forward metrics-server-58b7c66876-z2l7v 443:443 -n kube-system
Forwarding from 127.0.0.1:443 -> 443
Forwarding from [::1]:443 -> 443
[root@k8s-master01 dashboard]#
查看docker容器端口映射
docker ps | grep kuboard
[root@k8s-master01 kubernetes_install]# docker ps | grep kuboard
6e4f71727a54 eipwork/kuboard:v3 "/entrypoint.sh" 14 minutes ago Up 14 minutes 443/tcp, 0.0.0.0:1080->80/tcp, :::1080->80/tcp, 0.0.0.0:30081->10081/tcp, :::30081->10081/tcp kuboard
1080 是外部端口》到80 端口内
docker端口映射格式为 宿主机端口:docker容器端口
测试端口是否映射成功
netstat -tulnp | grep 30081
查看 ApiServer 地址
$ kubectl cluster-info
输出结果如下:
Kubernetes control plane is running at https://192.168.28.199:16443
查看 ApiServer 地址的其他方式如下:
在 Kubernetes 集群中,ApiServer 的地址通常在集群的配置文件中指定,这个配置文件通常位于控制平面节点上的 /etc/kubernetes/manifests/
目录中,文件名为 kube-apiserver.yaml
。您可以通过查看这个文件来找到 ApiServer 的地址。
以下是查看 ApiServer 地址的步骤:
-
登录到控制平面节点: 使用 SSH 连接到运行 Kubernetes API 服务器的控制平面节点。
-
查看 ApiServer 配置文件: 使用
cat
命令查看 ApiServer 的配置文件:sudo cat /etc/kubernetes/manifests/kube-apiserver.yaml
在输出中,查找
--advertise-address
参数,它指定了 ApiServer 监听的 IP 地址。 -
查看 Kubernetes 配置文件: 如果您是集群的管理员,您也可以查看
kubeconfig
文件来获取 ApiServer 的地址。通常,这个文件位于/etc/kubernetes/admin.conf
或~/.kube/config
。使用kubectl
命令查看当前上下文的配置:kubectl config view
在输出中,查找
server
字段,它指定了 ApiServer 的地址。 -
使用
kubectl
命令: 您也可以使用kubectl
命令来获取 ApiServer 的地址:kubectl cluster-info
这个命令会显示 ApiServer 的地址和端口。
-
查看 Pod 描述信息: ApiServer 通常以 Pod 的形式运行在
kube-system
命名空间中。您可以查看 ApiServer Pod 的描述信息来获取其 IP 地址:kubectl describe pod -n kube-system | grep -i "control plane"
在输出中,查找
ControlPlane
Pod 的 IP 地址。
请注意,ApiServer 的地址通常是内部地址,用于集群内部通信。如果您需要从外部访问 ApiServer,您可能需要配置 Kubernetes 的 RBAC 和网络策略,或者使用 Kubernetes 的代理功能。