[关闭]
@zhangyy 2021-11-26T13:23:01.000000Z 字数 6888 阅读 267

k8s 1.22.4 kubeadm 部署

kubernetes系列



一: 系统环境初始化

1.1 系统环境

  1. cat /etc/hosts
  2. ----
  3. 172.16.10.11 flyfishsrvs01
  4. 172.16.10.12 flyfishsrvs02
  5. 172.16.10.13 flyfishsrvs03
  6. 172.16.10.14 flyfishsrvs04
  7. 172.16.10.15 flyfishsrvs05
  8. 172.16.10.16 flyfishsrvs06
  9. 172.16.10.17 flyfishsrvs07
  10. -----
  11. 先安装单master版本后续扩容成多master
  12. 系统关闭firewalld/selinux /清空iptables防火墙规则

1.2 升级系统内核

  1. 所有机器都要升级内核
  2. #查看当前内核版本
  3. uname -r
  4. uname -a
  5. cat /etc/redhat-release
  6. #添加yum源仓库
  7. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  8. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  9. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  10. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  11. yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
  12. #更新yum源仓库
  13. yum -y update
  14. #查看可用的系统内核包
  15. yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
  16. #安装内核,注意先要查看可用内核,我安装的是5.4版本的内核
  17. yum --enablerepo=elrepo-kernel install kernel-lt
  18. #查看目前可用内核
  19. awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
  20. #使用序号为0的内核,序号0是前面查出来的可用内核编号
  21. grub2-set-default 0
  22. #生成 grub 配置文件并重启
  23. grub2-mkconfig -o /boot/grub2/grub.cfg
  24. reboot

image_1flao9h9tdvk1mj21tvd1m2nig519.png-151.1kB

image_1flaod6ot06skkco19n51ca649.png-114.9kB

1.png-23.7kB


1.2 环境配置

  1. #修改时区,同步时间
  2. yum install chrond -y
  3. vim /etc/chrony.conf
  4. -----
  5. ntpdate ntp1.aliyun.com iburst
  6. -----
  7. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  8. echo 'Asia/Shanghai' > /etc/timezone
  9. #关闭防火墙,selinux
  10. systemctl stop firewalld
  11. systemctl disable firewalld
  12. sed -i 's/enforcing/disabled/' /etc/selinux/config
  13. setenforce 0
  14. ## 关闭swap
  15. swapoff -a
  16. sed -ri 's/.*swap.*/#&/' /etc/fstab
  17. #系统优化
  18. cat > /etc/sysctl.d/k8s_better.conf << EOF
  19. net.bridge.bridge-nf-call-iptables=1
  20. net.bridge.bridge-nf-call-ip6tables=1
  21. net.ipv4.ip_forward=1
  22. net.ipv4.tcp_tw_recycle=0
  23. vm.swappiness=0
  24. vm.overcommit_memory=1
  25. vm.panic_on_oom=0
  26. fs.inotify.max_user_instances=8192
  27. fs.inotify.max_user_watches=1048576
  28. fs.file-max=52706963
  29. fs.nr_open=52706963
  30. net.ipv6.conf.all.disable_ipv6=1
  31. net.netfilter.nf_conntrack_max=2310720
  32. EOF
  33. sysctl -p /etc/sysctl.d/k8s_better.conf
  34. #确保每台机器的uuid不一致,如果是克隆机器,修改网卡配置文件删除uuid那一行
  35. cat /sys/class/dmi/id/product_uuid

二: 安装docker

  1. 安装docker#
  2. 这里介绍yum源安装
  3. 1. 卸载旧版本
  4. yum remove docker \
  5. docker-client \
  6. docker-client-latest \
  7. docker-common \
  8. docker-latest \
  9. docker-latest-logrotate \
  10. docker-logrotate \
  11. docker-engine \
  12. docker-ce
  13. rm -rf /var/lib/docker
  14. 2.安装必备软件包
  15. yum install -y yum-utils \
  16. device-mapper-persistent-data \
  17. lvm2
  18. 3.设置yum
  19. #建议使用阿里源
  20. yum-config-manager \
  21. --add-repo \
  22. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  23. #官方源
  24. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  25. 4.安装docker
  26. 这里介绍两种安装方式,我是用的是第一种
  27. 1)使用yum命令安装
  28. #查看可用版本
  29. yum list docker-ce --showduplicates | sort -r
  30. #安装18.09.1的版本,安装其他版本照套格式就行
  31. yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
  32. #安装最新版本
  33. yum install -y docker-ce docker-ce-cli containerd.io
  34. vim /etc/docker/daemon.json
  35. -----
  36. {
  37. "exec-opts": [
  38. "native.cgroupdriver=systemd"
  39. ],
  40. "log-driver": "json-file",
  41. "log-level": "warn",
  42. "log-opts": {
  43. "max-size": "1000m",
  44. "max-file": "3"
  45. },
  46. "registry-mirrors": [
  47. "https://b9pmyelo.mirror.aliyuncs.com"
  48. ],
  49. "insecure-registries": [],
  50. "selinux-enabled": false
  51. }
  52. ------
  53. 2)使用shell脚本安装
  54. 使用官方提供的shell脚本安装,脚本会自动检测系统信息并进行配置。
  55. #安装最新版本docker
  56. curl -fsSL https://get.docker.com/ | sh
  57. #或者
  58. wget -qO- https://get.docker.com/ | sh
  59. #安装尝鲜版本,但不稳定容易原地爆炸
  60. curl -fsSL https://test.docker.com/ | sh
  61. #下载Docker安装包
  62. https://hub.docker.com/search?offering=community&q=&type=edition
  63. 3)启动docker
  64. #加入开机启动项、启动docker
  65. systemctl enable docker
  66. systemctl start docker
  67. #验证
  68. docker run hello-world
  69. docker version

image_1flb5b5r81v5kagd1p8r9cpf6619.png-155.6kB

三:安装k8s1.22.4

3.1 增加阿里云源

  1. 1.添加阿里云YUM软件源
  2. cat << EOF > /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  6. enabled=1
  7. gpgcheck=1
  8. repo_gpgcheck=1
  9. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. EOF
  11. wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
  12. wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo

3.2 安装kubeadm,kubelet和kubectl

  1. 安装kubeadmkubeletkubectl
  2. 目前最新版本是1.22.4,我们直接上最新版
  3. yum install -y kubectl-1.22.4 kubelet-1.22.4 kubeadm-1.22.4
  4. systemctl enable kubelet

image_1flb5kqhq1h651iu91f40dogf5s26.png-175.1kB

3.3 初始化 部署Master节点

  1. 部署Master节点#
  2. 初始化有如下两种方式
  3. 方式一:使用kubeadm init命令初始化
  4. k8s-Master01上执行,报错请看k8s报错汇总
  5. kubeadm init \
  6. --apiserver-advertise-address=172.16.10.11 \
  7. --image-repository registry.aliyuncs.com/google_containers \
  8. --kubernetes-version v1.22.4 \
  9. --service-cidr=10.96.0.0/12 \
  10. --pod-network-cidr=10.244.0.0/16 \
  11. --ignore-preflight-errors=all
  12. --apiserver-advertise-address 集群通告地址
  13. --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  14. --kubernetes-version K8s版本,与上面安装的一致
  15. --service-cidr 集群内部虚拟网络,Pod统一访问入口
  16. --pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致
  17. --ignore-preflight-errors=all 忽略一些检查错误

12.png-178.5kB

13.png-123.7kB

14.png-94.5kB

  1. scp /etc/docker/daemon.json root@172.16.10.12:/etc/docker/
  2. scp /etc/docker/daemon.json root@172.16.10.13:/etc/docker/

15.png-83.5kB

  1. node 节点重启docker
  2. service docker restart

image_1fld2b2n4f2d2ou2rr14v8hq54n.png-74.2kB

image_1fld2d3i54e91eva1frf5ei7764.png-66.4kB

  1. flyfishsrvs02,flyfishsrvs03 节点加入
  2. kubeadm join 172.16.10.11:6443 --token alp562.cpgysql4occ4a1nv \
  3. --discovery-token-ca-cert-hash sha256:c5afaeff1d3f0bd31caeb5cc7876691e6efdcc4030030af151990a8f845f2cb4

image_1fld2h49p759pq1dpa10a3lcr7h.png-169kB

image_1fld2hhv31l5ocil68c6812qi7u.png-175kB

16.png-52.5kB

  1. kubectl get cs

17.png-52.3kB

  1. 关于报错:
  2. Get "https://127.0.0.1:10257/healthz": dial tcp 127.0.0.1:10257: connect: connection refused

  1. vim /etc/kubernetes/manifests/kube-controller-manager.yaml
  2. vim /etc/kubernetes/manifests/kube-scheduler.yaml

19.png-85.8kB

18.png-98.2kB

  1. kubectl get cs

20.png-42.5kB


3.4 安装容器网络

  1. 网络组件有很多种,只需要部署其中一个即可,推荐Calico
  2. Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括KubernetesOpenStack等。
  3. Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
  4. 此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。
  5. 1.下载Calico
  6. wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
  7. vim +3878 calico.yaml
  8. ...
  9. - name: CALICO_IPV4POOL_CIDR
  10. value: "10.244.0.0/16"
  11. ...

27.png-72.4kB

  1. kubectl apply -f calico.yaml

28.png-190.4kB


  1. kubectl get pods -n kube-system

29.png-102.9kB

31.png-98.6kB

  1. kubectl get node

32.png-46.2kB

image_1fld5cobh12ea1fpifuh36m6c3l0.png-157.1kB

3.5 部署dashboard

  1. 1.下载yaml文件
  2. 官网下载地址
  3. 目前最新版本为v2.4.0
  4. wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
  5. vim recommended.yaml
  6. ----
  7. kind: Service
  8. apiVersion: v1
  9. metadata:
  10. labels:
  11. k8s-app: kubernetes-dashboard
  12. name: kubernetes-dashboard
  13. namespace: kubernetes-dashboard
  14. spec:
  15. ports:
  16. - port: 443
  17. targetPort: 8443
  18. nodePort: 30001
  19. type: NodePort
  20. selector:
  21. k8s-app: kubernetes-dashboard
  22. ----
  23. kubectl apply -f recommended.yaml
  24. kubectl get pods -n kubernetes-dashboard
  25. kubectl get pods,svc -n kubernetes-dashboard

image_1fld7km248jrt2sc84htqemld.png-152kB

33.png-50.9kB

image_1fld7pht31n4l1blk1j3k22mk9km6.png-170.6kB

  1. # 创建用户
  2. kubectl create serviceaccount dashboard-admin -n kube-system
  3. # 用户授权
  4. kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  5. # 获取用户Token
  6. kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

image_1fld7rq2lsn9nso2arb71hmkmj.png-318.7kB

  1. http://172.16.10.11:30001

image_1fld9u40k12931675th01auf1kuv9.png-417.9kB

  1. kubectl create deployment nginx --image=nginx
  2. kubectl expose deployment nginx --port=80 --type=NodePort

image_1fldasu3bf3c1vlscul1icq46sp.png-151.9kB

image_1fldb0ll8c7h41g8gn1t2l12ik16.png-110.6kB

  1. 这里的警告表示在v1.19+版本,该命令要被弃用了
  2. 这里的cs是缩写,全称是componentstatuses,意为组件状态
  3. 该命令是查看k8s资源,k8s资源有很多,resources意为资源
  4. kubectl api-resources | more

image_1fld3u2fo10lgrv91s0hck5l9he1.png-213.3kB

  1. 第一列是资源的名字
  2. 第二列是缩写
  3. 第三列是API
  4. 第四列是否支持命名空间

  1. 查看api代理的URL
  2. kubectl cluster-info

21.png-65.4kB

  1. 查看集群详细信息
  2. kubectl cluster-info dump |more

23.png-94.3kB

  1. 信息很多,以json格式输出的,一般很少使用,常用的如下
  2. kubectl describe node flyfishsrvs01

24.png-123kB

  1. kubectl describe cs

25.png-65.2kB

  1. kubectl get pod -n kube-system

image_1fldb2tbg1guclqfkug1ur41ejj1j.png-171.7kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注