目录
一、安装k8s
1、环境配置(三台机子一起做)
2、docker安装
3、所有节点配置K8S源
二、k8s命令
故障集:
准备三台虚拟机
master 192.168.182.139
node1 192.168.182.138
node2 192.168.182.137
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
free -g #验证,swap 必须为 0;
vi /etc/hosts
192.168.182.139 master
192.168.182.138 node01
192.168.182.137 node02
#将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker-ce 社区版
yum install -y docker-ce
#环境配置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
systemctl start docker
systemctl enable docker
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装 kubelet、kubeadm、kubectl 组件
yum list|grep kube
yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
systemctl enable kubelet
systemctl start kubelet
以下做master操作
master节点制作
kubeadm init \
--apiserver-advertise-address=192.168.182.139 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.21.3 \
--service-cidr=10.125.0.0/16 \
--pod-network-cidr=10.150.0.0/16
如有问题:
kubeadm init --apiserver-advertise-address=192.168.182.139 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.21.3 --service-cidr=10.125.0.0/16 --pod-network-cidr=10.150.0.0/16
安装好后 会出现7个镜像
创建K8S组件的家目录 提权(必做)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
将上面master生成的 复制在node1和2中
复制、记录申请加入集群命令
kubeadm join 192.168.226.130:6443 --token z62t2l.0rp01bd7z4hwu375 \
--discovery-token-ca-cert-hash sha256:069d44c04fd5c0e2576dab8efc22636eaabb341efa2d707c4fddc43ab30be48a
在master上做
kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
##或者使用镜像包导入的方式完成flannel的部署
node节点一直报错 无法ready
原因:pod在创建时 会部署init环境 需要等待红框内的环境部署完毕才可以进行下一步
1、先安装nginx-deployment.yaml
可以看到 副本集中即使删除了 也还会创建新的 容器 副本集内的数量是可以更改但是添加 或者删除是无法改变副本集中的数量
[root@master ~]# kubectl describe nodes master 使用这条命令可以查看主master的信息
[root@master ~]# kubectl describe nodes nginx-585449566-764c4 可以查看pod的信息
左图在监控 有图在删除 可以看到删除后 副本集中 会自动添加新的容器
想要删除 需要先删掉控制器(pod分为两种 一种是自主式、申明式指带有控制器管理的pod)
⭐⭐⭐发布nginx service提供负载均衡的功能
nodeport模式:指的是pod暴露出去时,使用的是该node节点的ip和其端口范围
面试题:pod怎么暴露出去的?service有几种模式?有什么区别
节点之间通讯 有nodeport和cluserip模式
1/2表示 启动“并就绪”的意思
面试题:主进程活着,但是健康检查失败,也就是未就绪,所以ready为0/2,但是status为running
查看资源对象简写
[root@localhost bin]# kubectl api-resources
查看关联后端的节点
[root@localhost bin]# kubectl get endpoints
网络状态详细信息
[root@localhost bin]# kubectl get pods -o wide
服务暴露的端口
[root@localhost bin]# kubectl get svc
在node01操作,查看负载均衡端口30638
//kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
1、ipvs 2、namespace 3、userspace
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# ipvsadm -L -n
在master01操作 查看访问日志(注意:如果访问其他node无法访问检查proxy组件)
[root@localhost bin]# kubectl get pods
[root@localhost bin]# kubectl logs nginx-585449566-dghd6
[root@master ~]# kubectl logs nginx-585449566-jv8kp
[root@master ~]# kubectl logs nginx-585449566-wnvb7
kubectlget endpoints 查看的是service服务发现这个资源代理后端位置k8s 集群的service是api-server nginx-service这个pod的service代理的是所有pod节点的位置
⭐⭐⭐更新nginx 为1.14版本
//谷歌浏览器重新加载刷新页面查看nginx版本信息
[root@localhost bin]# kubectl set --help
]Configure application resources
These commands help you make changes to existing application resources.
Available Commands:
env Update environment variables on a pod template
image 更新一个 pod template 的镜像
resources 在对象的 pod templates 上更新资源的 requests/limits
selector 设置 resource 的 selector
serviceaccount Update ServiceAccount of a resource
subject Update User, Group or ServiceAccount in a
RoleBinding/ClusterRoleBinding
Usage:
kubectl set SUBCOMMAND [options]
Use "kubectl --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all
commands).
此时nginx是1.21版本
[root@localhost bin]# kubectl rollout history deployment/nginx ⭐⭐⭐回滚nginx
[root@localhost bin]# kubectl rollout --help
Manage the rollout of a resource.
Valid resource types include:
* deployments
* daemonsets
* statefulsets
Examples:
# Rollback to the previous deployment
kubectl rollout undo deployment/abc
# Check the rollout status of a daemonset
kubectl rollout status daemonset/foo
Available Commands:
history 显示 rollout 历史
pause 标记提供的 resource 为中止状态
resume 继续一个停止的 resource
status 显示 rollout 的状态
undo 撤销上一次的 rollout
查看历史版本
[root@localhost bin]# kubectl rollout history deployment/nginx
执行回滚
[root@localhost bin]# kubectl rollout undo deployment/nginx
deployment.extensions/nginx
//检查回滚状态
[root@localhost bin]# kubectl rollout status deployment/nginx
deployment "nginx" successfully rolled out
删除nginx (当需要删除时 需要把相关资源全部删除才行)
//查看deployment
[root@localhost bin]# kubectl get deploy
[root@localhost bin]# kubectl delete deployment/nginx
删除服务SVC
[root@localhost bin]# kubectl get svc
[root@localhost bin]# kubectl delete svc/nginx-service
[root@localhost bin]# kubectl get svc
查看具体资源的详细信息
[root@localhost bin]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3、
[root@localhost bin]# kubectl get pods
[root@localhost bin]# kubectl describe pod nginx-7697996758-75shs
查看deployment资源
[root@localhost bin]# kubectl describe deployment/nginx
进入pod
[root@localhost bin]# kubectl exec -it nginx-7697996758-75shs bash
当run 下载副本集是 出现一个下面的情况
原因:从logs中看出 是下载镜像时 timout 超时
1、可以直接从其他地方导入镜像
2、可以直接重新加载试试
3、docker pull直接下载
总结:小结:
一、首先本章内容介绍的是kubectl命令常用操作和Pod的生命周期1、分类
1、查询命令
⭐kubectl get 资源类型具体的资源对象【-n namespace 指定名称空间,默认为default】
⭐kubectl describe资源类型具体的资源对象【-n namespace 指定名称空间,默认为default】
⭐kubectl logs pod _name 【-n namespace指定名称空间,默认为default】
⭐⭐⭐其中主要介绍了【kubectl describe】查看详细信息中的部分:
1)【kubectl describe nodes master】
重要的核心点在于:
Taints : node-role. kubernetes.io/ master:NoSchedule
Unschedulable: false
因为以上: Master几点默认被打了污点,所以Pod不可调度到Master这里
2)排障
场景:我们通过监控告警得知,K8s集群中node2节点notready ( kubectl get nodes)
[ root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 171m v1.15.0
node01 Ready node 168m v1.15.0
node02 NotReady node 169m v1.15.0
#我们先通过以下命令查看events事件:
kubectl describe nodes node02
查看events事件-》再定位到问题点
1、网络问题(flannel问题)―》到达node02节点,发现node02还是可以登陆的,但是使用ifconfig之后,发现flannel0网卡没了解决的问题:如何让flannel网桥恢复正常
2、node02节点真的宕机了—》宕机的原因—》因为资源不够
输入一下命令
[root@master ~]# sed -i 's/- --port=0/# - --port=0/g' /etc/kubernetes/manifests/kube-scheduler.yaml
[root@master ~]# sed -i 's/- --port=0/# - --port=0/g' /etc/kubernetes/manifests/kube-controller-manager.yaml
cd到指定目录下[root@master ~]# cd /etc/kubernetes/manifests
输入:[root@master manifests]# kubectl apply -f kube-controller-manager.yml