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,有以下两种原因:
- 集群节点之前时间不同步。
- token过期,重新生成一下。
- 防火墙是否关闭。
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定时器实现定时作业任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律