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定时器实现定时作业任务

posted @ 2022-04-14 17:09  时光城主  阅读(316)  评论(0编辑  收藏  举报