k8s安装、kubectl命令实操

本地minikube安装k8s集群

个人主机上安装和配置 kubernetes 有两个可选的套装

  1. kind: kind 让你能够在本地计算机上运行 Kubernetes。 kind 要求你安装并配置好 Docker。

Minikube 在本地机器上的 VM 内运行一个单节点 Kubernetes 集群
虚拟机内部的端口(默认为8443)
所以只能在本地直连,远程kubectl要连接需要其次将虚拟机内部的端口映射出来

# 下载linux最新的 minikube稳定版本
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube


# 启动  Minikube 虚拟机(VM):
minikube start

## 查看 Minikube 虚拟机(VM)IP:
echo $(minikube ip)

minikube dashboard

# 查看服务
minikube service --all

# 停止 Minikube 虚拟机(VM):
minikube stop

# 删除 Minikube 虚拟机(VM):
minikube delete

生成环境建议用kubeadm 创建k8s

将 minikube 的服务暴露到宿主机外

minikube 虚拟出了一个 IP 作为自身的节点 IP(minikube ip),(minikube ip) 和宿主机不同。对于 NodePort 类型的 Service 也没有办法通过 127.0.0.1 访问。

  1. ssh代理
  2. k8s转发
kubectl port-forward --address 0.0.0.0 service/<service-name> <宿主机端口>:<minikube端口>

minikube安装问题记录

  1. 执行 minikube start报错:Exiting due to DRV_AS_ROOT: The “docker” driver should not be used with root privileges.
    解决方法:不用root用户运行,或启动改为 minikube start --force --driver=docker
    成功:Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default



kubectl操作k8s

操作k8s集群可以分为两种方式:

  1. 使用kubectl命令行工具
  2. 通过Dashboard页面可视化操作。
    Dashboard在k8s上是以插件的方式安装,集群出现问题时可能无法正常显示,还需要使用kubectl命令行工具来排查问题,并且命令行的方式效率很高,
    因此kubectl的安装与配置是管理员必须要掌握的。

安装kubectl

kubectl本身只是一个可执行文件, 只需配置环境变量即可使用

一般语法

https://www.kubernetes.org.cn/doc-45

kubectl [command] [TYPE] [NAME] [flags]

  • command是您要执行的操作
    例如create、expose、run、get、describe、logs、exec、delete
  • type是Kubernetes资源类型
    例如namespace、services、deployment、pod
  • name是资源的具体名称
    例如app_frontend
  • flags是您要包含的任何可选标志

连接k8s集群

  1. 创建一个配置文件, 配置k8s集群地址、用户密码、上下文
apiVersion: v1
kind: Config
clusters:
- name: "test1"  # 集群名称、下面的contexts里面的cluster:value值对应
  cluster:
    server: "https://test.com/k8s/clusters/a-99abr"
- name: "test2"
  cluster:
    server: "https://test.com/k8s/clusters/b-99abr"
    
users:
- name: "root"  # 用户名称、下面的contexts里面的user:value值对应
  user:
    token: "****"

contexts:
- name: "contexts1"  # 上下文名称、在命令行中做集群切换时会用到
  context:
    user: "root"
    cluster: "test1"
- name: "contexts2"  # 上下文名称、在命令行中做集群切换时会用到
  context:
    user: "root"
    cluster: "test2"
    
current-context: "contexts1"  # 当前正在使用的上下文名称、表示kubectl连接的集群为test1

  1. 配置名为KUBECONFIG的环境变量,路径指向config文件
  2. 执行命令查看集群信息
kubectl cluster-info

切换上下文

# 显示k8s配置文件
kubectl config view

# 查看当前上下文
kubectl config current-context
kubectl config get-contexts

# 修改当前上下文
kubectl config use-context [contextsName]

操作k8s集群

查看 资源

# 列出资源
kubectl get [资源TYPE]
	# namespace、services、deployment、pod
	
kubectl get all

# 显示有关资源的详细信息
kubectl describe [资源TYPE]

# 打印 pod 和其中容器的日志
kubectl logs [pod]

# 在 pod 中的容器上执行命令
kubectl exec [pod]

namespace

# 当前ns
kubectl config view --minify | grep namespace

# 切换ns
kubectl config set-context --current --namespace=<namespace>

创建Deployment、暴露Service

# 创建 Deployment
kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4

# 查看 Deployment:
kubectl get deployments

# 创建 Service 
kubectl expose deployment hello-node --type=[spec.type] --port=8080
	# ClusterIP、NodePort、LoadBalancer、

# 获取minikube提供的Service访问地址
minikube service hello-node
## 访问services
curl URL

# 删除services
kubectl delete services hello-node
# 删除deployment
kubectl delete deployment hello-node
通过yaml部署
kubectl create -f nginx-deployment.yaml --dry-run
kubectl apply -f nginx-deployment.yaml
扩缩pod
# 修改deployments的replicas
kubectl scale deployments/hello-node --replicas=2
  • 查看多pod的service负载均衡
kubectl describe service/hello-node
更新pod的Image

通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新
服务将在更新期间仅对可用的 pod 进行负载均衡

# 查看当前Image:
kubectl describe pods
# Containers:
#   echoserver:
#     Image: XXX:v1

# 更新Image
kubectl set image deployments/hello-node XXX:v2
回滚
kubectl rollout undo deployments/hello-node
访问pod
# 通过podName访问
kubectl exec -i -t [podName] -- /bin/bash

# 可指定命名空间namespace
kubectl exec -i -t [podName] -n [namespace] -- bash
拷贝pod文件
# 复制文件
kubectl cp <pod-name>:path/to/remote/file /path/to/local/directory

# 复制目录
kubectl cp -r <pod-name>:path/to/remote/directory /path/to/local/directory

# 本地到pod
kubectl cp /path/to/local/file <pod-name>:path/to/remote/directory

注:<pod-name>:后不支持绝对路径,要用登录进pod时的相对路径, 而且不能包含驱动器号, 如果文件位于子目录中,则路径需要包含斜杠,但不能包含反斜杠

labels

# 查询指定labels的pod
kubectl get pod -l [labels]
# 查询指定labels的services
kubectl get services -l [labels]

# 给pod加labels
kubectl label pods [podName] [labels]

ConfigMaps、Secret

为 docker 容器设置环境变量

  • 设置ConfigMaps、Secret
kubectl create configmap sys-app-name --from-literal name=my-system

kubectl create secret generic sys-app-credentials --from-literal username=bob --from-literal password=bobpwd

  • 使用ConfigMaps、Secret
    spec:
      containers:
        # Set the APP_NAME environment variable
        env:
        - name: APP_NAME
          valueFrom:
            configMapKeyRef:
              name: sys-app-name
              key: name

        # Set the SYSTEM_APP_USERNAME and SYSTEM_APP_PASSWORD environment variables
        env:
        - name: SYSTEM_APP_USERNAME
          valueFrom:
            secretKeyRef:
              name: sys-app-credentials
              key: username
        - name: SYSTEM_APP_PASSWORD
          valueFrom:
            secretKeyRef:
              name: sys-app-credentials
              key: password
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值