Kubernetes

1、集群搭建(kubeadm)

1.1、环境准备

  1. # 关闭防火墙
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. # 关闭selinux
  5. sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
  6. setenforce 0 # 临时
  7. # 关闭swap
  8. swapoff -a # 临时
  9. sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
  10. # 根据规划设置主机名
  11. hostnamectl set-hostname <hostname>
  12. # 在 Master 添加 hosts
  13. cat >> /etc/hosts << EOF
  14. 192.168.0.181 k8smaster
  15. 192.168.0.182 k8snode1
  16. 192.168.0.183 k8snode2
  17. EOF
  18. # 将桥接的IPv4流量传递到iptables的链
  19. cat > /etc/sysctl.d/k8s.conf << EOF
  20. net.bridge.bridge-nf-call-ip6tables = 1
  21. net.bridge.bridge-nf-call-iptables = 1
  22. EOF
  23. sysctl --system # 生效
  24. # 时间同步
  25. yum install ntpdate -y
  26. ntpdate time.windows.com
  27. # 东八区
  28. cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

1.2、安装

  1. ###### 所有节点安装Docker/kubeadm/kubelet
  2. ### 安装docker
  3. .....
  4. ## 添加阿里云YUM软件源
  5. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  6. [kubernetes]
  7. name=Kubernetes
  8. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  9. enabled=1
  10. gpgcheck=0
  11. repo_gpgcheck=0
  12. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  13. EOF
  14. ### 安装kubeadm,kubelet和kubectl
  15. yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
  16. systemctl enable kubelet
  17. ### 部署 Kubernetes Master
  18. kubeadm init \
  19. --apiserver-advertise-address=192.168.0.181 \
  20. --image-repository registry.aliyuncs.com/google_containers \
  21. --kubernetes-version v1.20.9 \
  22. --service-cidr=10.96.0.0/12 \
  23. --pod-network-cidr=10.244.0.0/16

image-20220120170848142.png

  1. ## 使用kubectl工具:上图框中
  2. mkdir -p $HOME/.kube
  3. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  4. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  5. ## 查看节点
  6. kubectl get nodes
  7. ## node节点执行
  8. ### 加入Kubernetes Node,上图下面的框中
  9. kubeadm join xxx --token xxx \
  10. --discovery-token-ca-cert-hash sha256:xxx
  11. ## 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token
  12. kubeadm token create --print-join-command
  13. ### 部署CNI网络插件
  14. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  15. ## 查看插件
  16. kubectl get pods -n kube-system
  17. ### 测试 kubernetes 集群
  18. kubectl create deployment nginx --image=nginx
  19. kubectl expose deployment nginx --port=80 --type=NodePort
  20. kubectl get pod,svc
  21. ## 访问: nodeIP:port (http://192.168.0.182:32474)

2、Kubectl

格式:kubectl [command] [type] [name] [falgs]

  • command:指定要对资源执行的操作,例如create、get、describe 和delete
  • type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的形式
  • name:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源
  • flags:指定可选的参数。例如,可用-s 或者–server 参数指定Kubernetes API server 的地址和端口。
  1. kubectl get pod
  2. kubectl get nodes
  3. kubectl --help

生成 yaml 文件

  1. # 使用 kubectl create 生成
  2. kubectl create deployment web --image=nginx -o yaml --dry-run > my.yaml
  3. # 使用 kubectl get 导出已有的
  4. kubectl get deploy nginx -o=yaml > my2.yaml

3、Pod

  1. apiVersion: v1
  2. kind: Pod
  3. metadata: //元数据
  4. name: string
  5. namespace: string
  6. labels:
  7. name: string
  8. annotations:
  9. -name: string
  10. spec:
  11. containers: //pod 中的容器列表,可以有多个容器
  12. - name: string //容器的名称
  13. image: string //容器中的镜像
  14. imagesPullPolicy: [Always|Never|IfNotPresent]//获取镜像的策略,默认值为 Always,每次都尝试重新下载镜像
  15. command: [string] //容器的启动命令列表(不配置的话使用镜像内部的命令) args:[string] //启动参数列表
  16. workingDir: string //容器的工作目录volumeMounts: //挂载到到容器内部的存储卷设置
  17. -name: string
  18. mountPath: string //存储卷在容器内部Mount 的绝对路径readOnly: boolean //默认值为读写
  19. ports: //容器需要暴露的端口号列表
  20. -name: string
  21. containerPort: int //容器要暴露的端口
  22. hostPort: int //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口,设置
  23. hostPort 时同一台宿主机将不能再启动该容器的第2 份副本)
  24. protocol: string //TCP 和UDP,默认值为TCP env: //容器运行前要设置的环境列表
  25. -name: string value: string
  26. resources:
  27. limits: //资源限制,容器的最大可用资源数量cpu: Srting
  28. memory: string
  29. requeste: //资源限制,容器启动的初始可用资源数量cpu: string
  30. memory: string
  31. livenessProbe: //pod 内容器健康检查的设置exec:
  32. command: [string] //exec 方式需要指定的命令或脚本httpGet: //通过httpget 检查健康
  33. path: string port: number host: string scheme: Srtring httpHeaders:
  34. - name: Stirng value: string
  35. tcpSocket: //通过tcpSocket 检查健康
  36. port: number initialDelaySeconds: 0//首次检查时间timeoutSeconds: 0 //检查超时时间
  37. periodSeconds: 0 //检查间隔时间
  38. successThreshold: 0
  39. failureThreshold: 0 securityContext: //安全配置
  40. privileged: falae
  41. restartPolicy: [Always|Never|OnFailure]//重启策略,默认值为Always
  42. nodeSelector: object //节点选择,表示将该Pod 调度到包含这些label 的Node 上,以
  43. key:value 格式指定
  44. imagePullSecrets:
  45. -name: string
  46. hostNetwork: false //是否使用主机网络模式,弃用Docker 网桥,默认否
  47. volumes: //在该pod 上定义共享存储卷列表
  48. -name: string emptyDir: {} hostPath:
  49. path: string secret:
  50. secretName: string item:
  51. -key: string path: string
  52. configMap: name: string items:
  53. -key: string
  54. path: string