• k8s安装笔记与常用命令整理


    k8s安装笔记与常用命令整理

    引言

    最近又重新开始看《Kubernetes权威指南 第五版》这本书了,需要搭建k8s的学习环境,我之前搭建过几次但是都没有做好笔记,时间一长自己竟然一点也想不起来了,所以这次就记一下笔记,主要是记录安装的环境、过程、一些命令还有遇到的问题以及解决的办法。

    一、系统环境

    系统 内核 docker ip 主机名称 配置
    centos 7.9 3.10.0-1160.el7.x86_64 19.03.0 172.16.102.22 master 2核4G
    centos 7.9 3.10.0-1160.el7.x86_64 19.03.0 172.16.102.23 node01 2核4G

    注意:请确保CPU至少2核内存2G

    二、准备工作

    1、设置主机名

    hostnamectl set-hostname master #设置ip为172.16.102.22的主机名称为master 
    hostnamectl set-hostname node01  #设置ip为172.16.102.22的主机名称为node01
    

    注意:

    1、设置完成主机名称后需要reboot一下才会生效。

    2、主机名不能带下划线,只能带中划线。

    2、修改hosts文件

    cat>> /etc/hosts << EOF #在/etc/hosts 文件中追加内容
    172.16.102.22  master
    172.16.102.23  node01
    EOF
    

    注意:hosts文件里面默认的以下内容不可以删除,不然安装网络插件calico时会出现错误

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    3、关闭并禁用selinux

    setenforce 0 #实时动态关闭
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁止重启后自动开启
    

    4、关闭交换分区

    swapoff -a #实时动态关闭
    sed -i '/ swap / s/^/#/' /etc/fstab #禁止重启后自动开启
    

    5、网络配置文件

    cat <<EOF > /etc/sysctl.d/k8s.conf        #创建k8s网络配置文件
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    EOF
    
    modprobe br_netfilter               #执行该命令 如果不执行就会在应用k8s.conf时出现加载错误
    sysctl -p /etc/sysctl.d/k8s.conf    #应用配置文件
    

    6、关闭防火墙

    systemctl stop firewalld.service && systemctl disable firewalld.service # 关闭防火墙并禁止开机启动
    

    7、配置资源地址

    yum install wget -y  #安装wget命令行
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#配置yum源
    yum makecache #更新缓存
    yum install -y yum-utils device-mapper-persistent-data lvm2 #安装yum扩展工具
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #配置docker下载的地址
    

    三、开始安装

    1、安装docker

    yum list docker-ce --showduplicates|sort -r  #展示版本列表
    yum install -y docker-ce-19.03.0 docker-ce-cli-19.03.0 containerd.io #指定19.03.0版本安装
    systemctl start docker && systemctl enable docker #启动docker并设置开机启动
    docker version #查看docker启动情况 和版本信息
    
    cat <<EOF > /etc/docker/daemon.json   #配置镜像加速、设置docker驱动为systemd
    {
      "exec-opts": [
        "native.cgroupdriver=systemd"
      ],
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
    EOF
    
    sudo systemctl daemon-reload && sudo systemctl restart docker #重新加载配置并且重启docker
    

    2、配置k8s资源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    

    3、安装kubelet kubeadm kubectl

     yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 #指定1.19.0版本安装
     systemctl enable kubelet && systemctl start kubelet      #启动并设置开机启动 
    

    4.初始化master-命令

    kubeadm init --kubernetes-version=v1.19.0  --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=172.16.102.22
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    注意:

    1、kubernetes-version:需要和安装的kubelet kubeadm kubectl版本一致。

    2、image-repository:设置镜像仓库的地址。

    3、apiserver-advertise-address:master主机的地址。

    4、pod-network-cidr:网络插件的地址范围 网段不能和主机网络一样。

    5.初始化master-配置

    kubeadm config print init-defaults > init.conf.yaml  #生成初始化配置
    kubeadm config  images list                          #查看默认配置的镜像
    kubeadm config images pull --config=init.conf.yaml   #根据配置提前下载镜像文件
    kubeadm init --config=init.conf.yaml                 #使用配置初始化master
    

    注意:init.conf.yaml的配置需要修改的地方

    apiVersion: kubeadm.k8s.io/v1beta3
    bootstrapTokens:
    - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef                     #默认的token 可以不修改
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
    kind: InitConfiguration
    localAPIEndpoint:
      advertiseAddress: 172.16.102.22                    #master主机的ip地址必须修改
      bindPort: 6443
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      imagePullPolicy: IfNotPresent
      name: master
      taints: null
    ---
    apiServer:
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns: {}
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.aliyuncs.com/google_containers #镜像仓库地址 建议改成国内的
    kind: ClusterConfiguration
    kubernetesVersion: 1.23.0                                #默认版本 必须和安装版本一致
    networking:
      dnsDomain: cluster.local
      serviceSubnet: 10.96.0.0/12                            #网络插件网段 不能和物理主机一个网段
    scheduler: {}
    

    6.添加node到master-命令

    kubeadm join 172.16.102.22:6443 --token abcdef.0123456789abcdef \
    	 	--discovery-token-ca-cert-hash sha256:c5ed3326627dd417fde0ba721e91c5ffb302b8a9fc999b4235796923f872b918
    

    注意:当node节点加入集群时卡在[preflight] Running pre-flight checks,有以下两种原因:

    1. 集群节点之前时间不同步。
    2. token过期,重新生成一下。
    3. 防火墙是否关闭。

    7.添加node到master-配置

    kubeadm config print join-defaults > join.conf.yaml  #获取默认的添加的配置
    kubeadm join --config=join.conf.yaml                 #根据配置添加节点到mster
    

    注意:需要修改的 join.conf.yaml

    apiVersion: kubeadm.k8s.io/v1beta2
    caCertPath: /etc/kubernetes/pki/ca.crt
    discovery:
    bootstrapToken:
     apiServerEndpoint: master:6443      #配置为master是需要在node的/etc/hosts文件中配置 
     token: abcdef.0123456789abcdef      #token 根据实际token修改
     unsafeSkipCAVerification: true
    timeout: 5m0s
    tlsBootstrapToken: abcdef.0123456789abcdef #token 根据实际token修改
    kind: JoinConfiguration
    nodeRegistration:
    criSocket: /var/run/dockershim.sock
    name: slave1
    taints: null
    

    8、安装calico网络插件

    wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
    kubectl apply -f calico.yaml
    

    注意:可以手动下载然后复制过来

    链接: https://pan.baidu.com/s/1VOudN0kYz7sxON1P0f8Hyg 提取码: l4mo

    9、安装dashboard-UI插件

    wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
    kubectl apply -f recommended.yaml #安装dashboard
    
    cat <<EOF > dashboard-adminuser.yaml # 创建admin-user用户配置
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    EOF
    
    kubectl apply -f dashboard-adminuser.yaml # 应用用户配置
    
    cat <<EOF > dashboard-ClusterRoleBinding.yaml #创建用户和角色绑定配置
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    EOF
    
    kubectl apply -f dashboard-ClusterRoleBinding.yaml # 应用用户角色关系配置
    
    kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') #获取登陆token
    

    注意:

    1、recommended.yaml 需要修改的地方:

    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      type: NodePort  #新增配置使节点可以被映射到主机ip
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 31443    #映射端口
      selector:
        k8s-app: kubernetes-dashboard
    

    2、访问地址:master主机ip+nodePort端口 。如:https://172.16.102.22:31443 ,另外因为证书的原因只有火狐浏 览器可以访问。

    3、recommended.yaml 文件手动下载地址: https://pan.baidu.com/s/1DpKniNt0T1RkT3oaNJPaUg 提取码: ctnu

    10、命令补全

    yum install -y bash-completion
    
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    source  ~/.bashrc
    

    四、常用命令

    1、重新生成添加节点token

    kubeadm token create --ttl 0 --print-join-command #在master主机生成
    

    2、ntpdate同步时间工具

    yum install ntpdate                        #安装ntpdate
    ntpdate ntp1.aliyun.com;hwclock --systohc  #同步时间
    

    3、kubctl常用命令

    kubectl get pod --all-namespaces -o wide   #查看所有pod的ip信息
    kubectl describe pod [name] -n kube-system #查看单个pod的详细信息
    kubectl apply -f name.yaml                 #应用配置
    kubectl delete nodes [nodename]            #删除某个节点
    kubeadm token list    #查看当前有效的token 添加节点使用的token
    kubeadm token create  #重新创建token
    kubeadm reset         #重置kubeadm配置 用于init 获join失败的情况
    journalctl -u kubelet #查看错误日志
    kubectl delete pod [podname] -n [namespaces] #删除某个pod
    

    4、shell常用命令

    firewall-cmd --list-ports            #查看防火墙开放的端口
    firewall-cmd --zone=public --add-port=80/tcp --permanent #永久开放防火墙的80端口
    firewall-cmd --reload #重启防火墙
    systemctl stop firewalld.service && systemctl disable firewalld.service# 关闭防火墙并禁止开启启动
    systemctl enable kubelet && systemctl start kubelet       #启动kubelet并设置开机启动 
    
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo              #创建文件并添加内容 覆盖
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    cat>> /etc/hosts << EOF                            #在已有点文件内容末尾追加
    172.16.102.22  master
    172.16.102.23  node01
    EOF
    
    grep -o '字符串' file |wc -l                        #使用grep命令进行统计
    awk -v RS="@#$j" '{print gsub(/字符串/,"&")}' file  #使用awk命令进行统计
    awk  '{s+=gsub(/字符串/,"&")}END{print s}' file     #另一种使用awk命令进行统计的方法
    
    sudo du -sh *                         #查看当前目录下文件和文件夹大小 可以用来查看mac磁盘使用情况
    ls -l |grep "^-"|wc -l                #查询当前文件夹文件数量
    df -h                                 #查询磁盘资源使用情况
    du -h --max-depth=1 /fileName         #查询目标文件夹下的文件大小
    find / -size +100M |xargs ls -lh      #全局搜索文件大小大于100M的文件
    tar -zcvf test.tar.gz test            #压缩当前目录下文件夹/文件test到test.tar.gz
    tar -zxvf file.tar.gz                 #解压命令到当前文件夹
    sort data.txt | uniq -d               #标记重复的文本
    awk '{print "xxx"$0}' fileName        #给一个文件中的每一行开头插入字符
    awk '{print $0"xxx"}' fileName        #给一个文件中的每一行结尾插入字符
    awk '$O=$O" xxx"' fileName            #给一个文件中的每一行的指定列插入字符
    grep -i "宇泛设备考勤信息" -A 1  log.txt | grep -v -e "--" >2.txt #获取文件中带有某个字符的行生产新文件
    chmod +x ./test.sh                    #使脚本具有执行权限
    chmod 777 dir                         #获取文件夹权限
    #mac 中抓取8080端口的数据包
    sudo tcpdump -s 0 -A 'tcp dst port 8080 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    

    5、vim 常用命令

    set number                     #设置显示行号
    22,27 s/^/#                    #多行注释 注释22到27行
    

    6、yum常用命令

    yum list kubelet --showduplicates|sort -r # 查看kubelet所有安装版本并且排序
    yum install -y kubelet-1.19.0             #安装指定版本
    yum list installed|grep docker            #查看已经安装的docker
    yum makecache                             #更新缓存
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #配置docker下载的地址
    
    yum search ~            #使用YUM查找软件包
    yum list                #列出所有可安装的软件包
    yum list updates        #列出所有可更新的软件包
    yum list installed      #列出所有已安装的软件包
    yum list extras         #列出所有已安装但不在Yum Repository 內的软件包
    yum list ~             #列出所指定软件包
    yum info ~             #使用YUM获取软件包信息
    yum info                #列出所有软件包的信息
    yum info updates        #列出所有可更新的软件包信息
    yum info installed      #列出所有已安裝的软件包信息
    yum info extras         #列出所有已安裝但不在Yum Repository 內的软件包信息
    yum provides ~           #列出软件包提供哪些文件
    

    7、docker常用命令

    systemctl daemon-reload && sudo systemctl restart docker  #重新加载配置并且重启docker
    docker logs --since 30m  [容器id]                          #查看容器30分钟以内的日志
    docker exec -it -u root  [容器id] /bin/sh                  #以管理员权限登陆容器shell
    docker login -u duzhaosongyue                             #登陆docker远程仓库
    docker build -t rust-alpine -f ./alpine/Dockerfile .      #根据dockerfile构建docker镜像
    docker run -p 8000:8000 rust-alpine                       #运行镜像文件
    docker logs -f --tail=100 39be55eb5353                    #查看容器日志默认100行
    docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=~wow1VSlol2 mysql #创建mysql实例并设置密码
    

    duzhaosongyue仓库token:bc78427d-033a-4323-9429-b1c4f101679b

    8、curl命令

    curl -X POST htwn://192.168.0.51:8090/actuator/shutdow  #curl post请求
    curl --location --request POST 'http://localhost:8080/upload' \ #curl上传图片
    --header 'Content-Type: multipart/form-data' \
    --form 'file=@/home/somewhere/picture.png'
    

    9、maven命令

    mvn clean package -DskipTests    #跳过测试打包
    

    10、crontab命令

    crontab -u root -l #查看定时任务列表
    crontab -u root -e #编辑定时任务
    */5 * * * * /root/mysql_back_script/mysql_dump_script.sh #定时任务内容 时间+脚本路径
    /sbin/service crond start    #启动服务
    /sbin/service crond stop     #关闭服务
    /sbin/service crond restart  #重启服务
    /sbin/service crond reload   #重新载入配置
    

    11、cargo常用命令

    cargo run                            #启动
    cargo build                          #构建
    cargo-watch                          #自动编译
    cargo add xx                         #添加依赖
    cargo rm  xx                         #删除依赖
    cargo edit xx                        #编辑依赖
    cargo uphgrade                       #更新全部依赖
    cargo outdated                       #检查依赖是否过期
    cargo clippy                         #代码格式化工具
    
    rustup override set stable           #切换到稳定版本
    rustup override set nightly          #切换到夜间版本
    rustup self update                   #升级工具版本
    rustup update                        #升级rust版本
    rustc --version                      #查看rust版本
    

    12、apt-get命令

    apt-get update      
    apt-get install vim 
    

    13、brew命令

    brew search xxx              #仓库搜索软件
    brew install xxx             #安装软件
    brew info xxx                #查询软件的信息
    brew update-reset            #更新
    brew update                  #更新到最新
    brew outdated                #会列出所有有新版本的程序
    brew upgrade                 #升级所有 当然也可以指定升级
    brew upgrade xxx             #指定的升级的程序名
    brew cleanup                 #清理不需要的版本及其安装缓存
    brew uninstall xxx           #删除不需要的程序
    man brew                     #更多命令
    

    五、应用场景

    1、shell调用redis命令

    #!/bin/sh
    redis-cli  -p 6379 << EOF
    auth jishuzhais
    set BTG12345666 "1"
    EXPIRE  BTG12345666 28800  
    EOF
    

    使用shell脚本配合crontab定时器实现定时作业任务

  • 相关阅读:
    Swap Nodes in Pairs
    Search for a Range——稍微升级版的二分查找
    Set Matrix Zeroes——常数空间内完成
    Ubuntu系统---C++之Eclipse 开始工程项目
    Ubuntu系统---C++之Eclipse编译器 CDT插件安装
    Ubuntu系统---开机总会显示错误报告处理
    Ubuntu系统---C++之Eclipse IDE 编译器安装
    Ubuntu系统---终端下用g++进行c++项目
    Ubuntu系统---进行C++项目开发的工具
    YOLO---Darknet下的 GPU vs CPU 速度
  • 原文地址:https://www.cnblogs.com/jishuzhaichen/p/16145537.html
Copyright © 2020-2023  润新知