全站最帅😎
发布于 2020-05-22 / 1756 阅读
0
0

Kubernetes基础操作

1. kubectl 基本用法

1.1 kubectl run

创建两个nginx pod,此时绑定的端口80只能在k8s集群内部访问

kubectl run nginx --image=nginx:1.7.9 --port=80 --replicas=2

查看deployment

kubectl get deployment

image.png

查看 pod,从中我们可以看到这些pod的一些信息,包括ip、运行在哪个node上啊这些。

# 获取 pod 的信息,-o wide 表示更详细的显示信息
kubectl get pod -o wide
curl 10.244.2.5

image.png

通过curl命令进行测试访问nginx,可以看到是可以成功访问的,但是此时是只能在k8s集群的所有节点可以访问,其他机器是访问不到的。

image.png

1.2 探究 pod 详情

可以看到pod的很多详细信息。
比如运行的node、ip、image版本、控制器(对应的deployment,可以通过上面的 kubectl get deployment查看,这些都是一一对应的)

kubectl describe pod nginx-6d5c56767-42v6f

image.png

下面是该pod创建的事件

image.png

进入容器内部命令 kubectl exet -it ,是不是发现命令和docker格外相像 😆

# 格式 kubectl exec -it podName -c containerName -n namespace -- shell comand
kubectl exec -it nginx-6d5c56767-42v6f -c nginx /bin/bash

1.3 删除 pod

执行命令之后发现的确显示已经删除成功了,但是通过查看deployment,我们发现nginx的实例数量还是两个,这究竟是怎么回事呢?因为k8s针对服务进行了高可用的一种模式,控制器控制服务的实例数量,并且时刻保证到达这个数量。在这里就是我们认为删除了一个pod,可以看到nginx-6d5c56767-42v6f已经没有了,但是控制器又自动给我们新建了一个pod以此来达到要求的实例数。

kubectl delete pod nginx-6d5c56767-42v6f

image.png

1.4 服务弹性伸缩

Pod 创建完成后,当服务的访问量过大时,可以对 pod 的进行扩展让 pod 中的服务处理更多的请求;当访问量减小时, 可以缩减 pod 数量,以节约资源。 这些操作都可以在线完成,并不会影响现有的服务。

我们将 deployment 中的 nginx 数量扩展到 3,服务缩减也是同理。

kubectl scale --replicas=3 deployment nginx
kubectl get deployment

image.png

1.5 服务的在线更新与回滚

在 k8s 中部署完服务后,对服务的更新可以在线完成,升级出问题后,也可以在线完成回滚。

# 更新镜像版本,比如更新nginx版本,原来是1.9.7,现在更新为1.9.3
kubectl set image deployment nginx nginx=nginx:1.9.3
# -w 参数是 watch,持续执行,并观察改变
kubectl get pods -w
# 更新镜像,区别于上面的更新版本,k8s可以做到完全换一个镜像。
kubectl set image deployment nginx nginx=nacos:1.2.1
# 回滚更新
kubectl rollout undo deployment nginx

最后注意的一点是,所谓意义上的更新回滚都是重新创建了pod,k8s里面创建pod的话那么服务ip是会改变的,所以为了解决服务更新之后ip变化的问题,我们将使用service来创建服务。

1.6 将服务暴露到外网

将 pod 创建完成后,访问该 pod 内的服务只能在集群内部通过 pod 的的地 址去访问该服务;当该 pod 出现故障后,该 pod 的控制器会重新创建一个 包括该服务的 pod,此时新创建的 pod ip会发生改变,如何保持 pod 的故障恢复,对调用者无影响呢?
我们可以创建一个 service,当新的 pod 的创建完成后,service 会通过 pod 的 label 连接到该服务,只需通过 service 即可访问该服务。下面我们创建nginx-service

kubectl expose deployment nginx --name=nginx-service --port=81 \
--target-port=80
# 创建成功后通过CLUSTER-IP去访问
curl 10.98.85.26:81

image.png

解决了ip随着pod被创建改变的问题之后,我们开始进行将服务暴露在外网:
创建一个新的service。

kubectl expose deployment nginx --name=nginx-service2 --port=81 \
--target-port=80 --type=NodePort
kubectl get service -o wide

image.png

我们可以看到,此刻相对于宿主机在外暴露了一个30006端口,此时我们可以根据 k8s集群任一节点ip:30006 去访问nginx了。

image.png

1.7 配置私仓镜像访问

kubectl create secret docker-registry tencent --docker-server=ccr.ccs.tencentyun.com --docker-username=USERNAME --docker-password=PASSWORD --docker-email=EMAIL

2. k8s完全卸载命令


kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove  kubelet-1.16.4-0.x86_64
yum remove  kubeadm-1.16.4-0.x86_64
yum remove  kubectl-1.16.4-0.x86_64

评论