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/
posted @ 2022-10-07 15:47  白日梦想家Zz  阅读(45)  评论(0)    收藏  举报