K8S相关学习笔记
- 安装kubernetes集群环境
1. 配置yum
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2. yum安装(master、node都要安装; kubeadm可以只安装到master)
yum install kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 -y
systemctl enable kubelet
systemctl start kubelet
3. 配置kubeadm文件初始化
kubeadm init \
--apiserver-advertise-address=172.16.200.201 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
4. 查询有效token
kubeadm token list
5.生成新的token
kubeadm token create --print-join-command
kubeadm join 172.16.200.201:6443 --token
kubeadm ifgjr8.7cudjz7rll3iim37 --discovery-token-ca-cert-hash sha256:ff9b5cd43a181126c8679d47916be5b29c83a81cf5302082780b2f5503f60f04
6.配置网络calico
wget https://docs.projectcalico.org/manifests/calico.yaml
7. 配置Dashboard
①生成token
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
②查看具体token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret|awk '/dashboard-admin/{print $1}')
- 关于deployment控制器
8. 使用deployment控制器部署镜像
kubectl create deployment web --image=nginx --replicas=3
# replicas 副本数、数量
# 或许apiVersion: kubectl api-resources|grep deployment
kubectl get deploy,pods
9. 使用service将pod暴露出去
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
kubectl get service
10. 浏览器访问应用
http://NodeIP:Port # 端口随机生成, 通过get svc获取
- 关于service和pod的yaml文件
# yaml文件模板kubernetes文档库下载
# deployment通过yaml文件创建pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: lain_web # deployment和service文件一致
spec:
replicas: 3
selector:
matchLabels:
app: nginx_v1 # deployment和service文件一致
template:
metadata:
labels:
app: nginx_v1 # deployment和service文件一致
spec:
containers:
- name: nginx
image: nginx # 通过修改image字段,可以升级镜像以及程序
kubectl apply -f XXX.yaml #deployment yaml文件
# service网络配置
apiVersion: v1
kind: Service
metadata:
name: web
namespace: slme
spec:
selector:
app: nginx_v1
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
# 启动yaml文件
kubectl apply -f xxx.yaml #service yaml文件
- k8s中的pods
Pod是kubernetes中最小单元,可以直接创建,但是不具备delplyment里的中断自动拉取、扩容、回滚、更新等属性;类似于docker容器。
# 创建pod
kubectl apply -f pod.yaml
或者使用命令:
kubectl run nginx --image=nginx
# 查看pod
kubectl get pods
kubectl describe pod <pod名称>
# -c CONTAINER多容器时指定容器名称
具体容器名称:containers 下name字段
# 查看日志
kubectl logs <pod名称> [-c CONTAINER]
kubectl logs <pod名称> [-c CONTAINER] -f
# 进入容器终端
kubectl exec -it <pod名称> [-c CONTAINER] -- bash
# 删除pod
kubectl delete pod <pod名称>
# 定义pod
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx
- name: busybox
command:
- sleep
- 24h
- 关于pod的扩容和缩容等
镜像里包含代码;
升级镜像实际是去升级代码程序;
# 升级方式
1. 通过修改yaml文件里面:image字段升级镜像,然后执行:
kubectl apply -f xxx.yaml -n slme
kubectl apply -f <update.yaml.file> -n <namespace>
2. 命令行升级
kubectl set image deployment web <pod_name>=<image_name>
kubectl set image deployment web nginx=nginx:1.17 -n slme
# 查看升级过程
kubectl describe deployment <deployment_name>
# 查看历史升级版本
kubectl rollout history deployment/web -n slme
# 回滚到上一个版本
kubectl rollout undo deployment/web -n slme
# 回滚到某一个版本
kubectl rollout undo deployment/web --to-revision=2 -n slme
# 记录命令--record=true
kubectl set image deployment web nginx=nginx:1.20.2 --record=true -n slme
# 关于pods的扩容和缩容
- 扩容方法:
1. 通过修改yaml文件replicas字段
2. 命令行:kubectl scale deployment web --replicas=10 -n slme
- k8s中的service
# Service通过标签关联Pod
# Service为一组Pod提供负载均衡能力
apiVersion: v1
kind: Service
metadata:
name: web # pods标签
spec:
selector:
app: nginx_v1
ports:
- protocol: TCP
port: 8888
targetPort: 80
type: NodePort # service模式,ClusterIP;
type: 30000-32767 #指定NodePort模式端口;
---
# Service的创建:
kubectl apply -f service.yaml
# 确认pods标签
kubectl get pods --show-labels
#Service三种常见类型
ClusterIP:集群内部使用
NodePort:对外暴露应用
在每个节点上启用一个端口来暴露服务, 可以在集群外部访问。也会分配一个稳定内部集群IP地址。访问地址:<任意NodeIP>:<NodePort>,端口默认范围:30000-32767
LoadBalancer:对外暴露应用,适用于公有云,与NodePort类似,在每个节点上启动一个端口来暴露服务。除此之外,kubernetes会请求底层云平台上的负载均衡器,将每个Node作为后端添加进去。
# Ingress为弥补NodePort不足而生
Ingress公开了从集群外部到集群内部服务的http和https路由的规则集合,而具体实现流量路由则是由Ingress Controller负责。
https://github.com/kubernetes/ingress-nginx
https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
# 其他Ingress控制器
https://kubernetes.io/zh/docs/concepts/services-networking/ingress-controllers/
本文来自博客园,作者:白日梦想家Zz,转载请注明原文链接:https://www.cnblogs.com/zzlain/articles/16759871.html

浙公网安备 33010602011771号