K8S和Docker常用基础操作

k8s Liemer_Lius 663℃

1、k8s的常用命令

# 查看node信息,no是缩写
kubectl get node|no
# 查看命名空间信息,ns是缩写
kubectl get namespace|ns
# 查看pod信息,po是缩写
kubectl -n zone2 get pod|po -o wide
# 查看所有ns的pod信息
kubectl get pod -o wide --all-namespaces
# 查看service信息,svc是缩写
kubectl -n zone2 get services|svc
# 查看pod的详细信息
kubectl -n zone2 describe pod pod_name
# 查看pod日志,-f是动态模式,类似tail -f
kubectl -n zone2 logs pod_name -f
# 驱逐pod,保留daemonsets
kubectl drain node-name --ignore-daemonsets --delete-local-data --force 

2、master节点常用操作

# 获取pod列表
kubectl -n zone2 get pod -o wide |grep ^myapp |awk '{print $1}' > lst/myapp.list
# 考本文件到远端pod
kubectl -n zone2 cp ./files/patch.jar myapp-h89H:/usr/local/myapp/files/patch.jar
# 将远端pod的文件拷贝到本地
kubectl -n zone2 cp myapp-h89H:/usr/local/myapp/files/patch.jar ./files/patch.jar
# 在远端pod执行命令
kubectl -n zone2 exec -ti myapp-h89H -- md5sum /usr/local/myapp/files/patch.jar

3、常用脚本

kubectl -n zone2 get pod -o wide |grep ^myapp |awk '{print $1}' > lst/myapp.list   # 先获取列表
vi remote.sh   # 遍历列表,拷贝脚本到远端,并执行脚本
#!/bin/bash
for POD_NAME in `cat lst/myapp.list`; do
    echo "==================================================${POD_NAME}=================================================="
    kubectl -n zone2 cp ./files/check_file.sh ${POD_NAME}:/tmp/check_file.sh
    kubectl -n zone2 exec -ti ${POD_NAME} -- nohup sh /tmp/check_file.sh &
done

4、Docker常用命令

# 查看docker容器,-a显示已经停止的容器
  docker ps [-a] 
# 用已知镜像开启一个docker,-d是daemon模式,不加-d,退出后docker自动停止, --name可以自定义名称,可以不加
  docker run -dt image_id|myapp:ver1 --name=test-lius
# 停止一个docker
  docker stop docker_id
# 删除容器,  -f为强制模式,如果docker是run的状态,不加-f会提示有在运行的docker,需先docker stop之后才可以删除
  docker rm docker_id [-f]
# docker [-u root] exec -ti docker_id /bin/bash # 进入一个docker,-u指定用户
# 显示docker的资源使用情况,如cpu、内存使用率,exec进入后,看到的资源是node的
  docker stats docker_id
# 查看docker容器详情
  docker inspect docker_id
# node执行docker命令,不能加-d(后台操作没有返回),-t(the input device is not a TTY)
  docker ps |egrep -v '/pause|IMAGE' |awk '{print $1}' |while read CID; do
      echo "========================= $CID ========================"
      docker exec -i $CID bash -c "netstat -anlp |grep :3717 |wc -l" < /dev/zero
  done
# 启动MYSQL容器
  docker run --privileged=true --name mysql8 -v /data/mysql_for_docker/data/:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=youguess -d mysql:latest
# 直接下载镜像并用tty的形式进入容器
   docker run -ti dockerhub.liutianfeng.com/lius/test-lius:20230216130337 bash 

Docker查看资源

docker stats [OPTIONS] [CONTAINER...]
  Display a live stream of container(s) resource usage statistics
    -a, --all   Show all containers (default shows just running)
    --format    string &nbsp; Pretty-print images using a Go template
    --no-stream Disable streaming stats and only pull the first result
    --no-trunc  Do not truncate output

5、镜像操作

# 查看系统内的镜像列表
  docker images
# 删除镜像[标签],如果image_id对应的镜像不唯一(有的镜像有不同的tag),只能使用myapp:ver1这类格式删除镜像[标签]。
  docker rmi img_id|myapp:ver1
# 给myapp:ver1打一个ver2的标签,如果image_id唯一,myapp:ver1可以用docker_id替换
  docker tag myapp:ver1 myapp:ver2
# 导入镜像,两种方式皆可
  docker load -i imgs/myapp_ver1.tar.gz | docker load < imgs/myapp_ver1.tar.gz
# 导出镜像,如果iamge_id唯一,可以用image_id,但是标签信息可能会缺失。导出的是tar格式,需要gzip压缩后才是tar.gz文件
  docker save myapp:ver1|image_id -o imgs/myapp_ver1.tar

6、镜像补丁

# vim Dockerfile   # 编辑Dockerfile,默认识别的固定文件名,当前目录
  FROM myapp:ver1   # 基准镜像,必须保证docker images列表中有这个标签的镜像
  USER app    // 指定默认用户
  COPY --chown=myapp:users ./pkgs/my_patch.jar /home/myapp/opt/work/app1/app1.jar   // --chown可以修改补丁文件的权限,一般很必要
# 制作tag为ver2的镜像
  docker build -t myapp:ver2 . // .是当前目录
# 导出新的镜像
  docker save myapp:ver2 ../imgs/myapp_ver2.tar
# 注意,制作镜像的目录里面,不要有不相关的文件和历史导出的镜像,否则制作过程中会加载当前目录的所有文件,导致镜像前期读取内容过多,时间变长。

Ingress

# 修改Ingress配置
  kubectl  edit cm -n ingress-nginx nginx-configuration

转载请注明:liutianfeng.com » K8S和Docker常用基础操作

喜欢 (4)

评论已关闭。