当前位置:  首页>> 技术小册>> Kubernetes云计算实战

一、集群部署准备

Kubernetes有三种安装方式:

1、通过yum进行安装

2、通过二进制文件进行安装

3、命令行工具kubeadm进行安装

kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,致力于简化集群的安装过程,并解决Kubernetes集群的高可用问题。

  1. 安装 kubernetes 所需软件包:
  2. 链接:https://pan.baidu.com/s/1GoxSWAHkB3AVn9aRzGMjkQ
  3. 密码:az0o

二、部署kubernetes集群

2.1、环境准备

准备好三台虚拟机分别做为 master、node-1、node-2

虚拟机硬件配置:

master:2CPU、4G

node-1:2CPU、2G
node-2:2CPU、2G

网络配置:
master:192.168.2.20
node-1:192.168.2.21
node-2:192.168.2.22
操作系统:
Centos-8 最小化安装

主机名设置:

  1. # hostnamectl set-hostname master
  2. # hostnamectl set-hostname node-1
  3. # hostnamectl set-hostname node-2

设置Hosts文件的相互解析:

  1. # cat /etc/hosts
  2. 192.168.2.20 master
  3. 192.168.2.21 node-1
  4. 192.168.2.22 node-2

2.2、操作系统初始化

a、关闭swap

  1. # swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

b、关闭Selinux

  1. # setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

c、关闭firewalld

  1. # systemctl stop firewalld && systemctl disable firewalld

d、重置Iptables并设置空规则:

  1. # yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

e、关闭不需要的服务:

  1. # systemctl stop postfix && systemctl disable postfix

2.3、配置网络源

  1. - 下载阿里云的yum源文件:
  2. # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
  3. - 安装epel源:
  4. # yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
  5. - repo 配置中的地址替换为阿里云镜像站地址:
  6. # sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
  7. # sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
  8. - 配置docker源:
  9. # yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  10. - 设置kubernetes源:
  11. # cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  12. [kubernetes]
  13. name=Kubernetes
  14. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  15. enabled=1
  16. gpgcheck=1
  17. repo_gpgcheck=1
  18. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  19. EOF

2.4、操作系统环境优化

  1. - 安装依赖包:
  2. # yum makecache && yum -y update
  3. # yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim-enhanced lrzsz net-tools git net-tools psmisc bash-completion yum-utils.noarch nmap bind-utils
  4. - 设置系统时区:中国/上海
  5. # timedatectl set-timezone Asia/Shanghai
  6. - 将当前的 UTC 时间写入硬件时钟:
  7. # timedatectl set-local-rtc 0
  8. - 重启依赖于系统时间的服务:
  9. # systemctl restart rsyslog
  10. # systemctl restart crond

2.5、针对Kubernetes调整内核参数

  1. # cat > kubernetes.conf <<EOF
  2. net.bridge.bridge-nf-call-iptables=1
  3. net.bridge.bridge-nf-call-ip6tables=1
  4. net.ipv4.ip_forward=1
  5. net.ipv4.tcp_tw_recycle=0
  6. vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
  7. vm.overcommit_memory=1 # 不检查物理内存是否够用
  8. vm.panic_on_oom=0 # 开启 OOM
  9. fs.inotify.max_user_instances=8192
  10. fs.inotify.max_user_watches=1048576
  11. fs.file-max=52706963
  12. fs.nr_open=52706963
  13. net.ipv6.conf.all.disable_ipv6=1
  14. net.netfilter.nf_conntrack_max=2310720
  15. EOF
  16. # cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
  17. # sysctl -p /etc/sysctl.d/kubernetes.conf

2.6、设置 rsyslogd 和 systemd journald

  1. # mkdir /var/log/journal # 持久化保存日志的目录
  2. # mkdir /etc/systemd/journald.conf.d
  3. # cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
  4. [Journal]
  5. Storage=persistent # 持久化保存到磁盘
  6. Compress=yes # 压缩历史日志
  7. SyncIntervalSec=5m # 写入硬盘间隔
  8. RateLimitInterval=30s # 限制日志的生成速率-时间段内
  9. RateLimitBurst=1000 # 限制日志的生成速率-每个服务最多允许产生的日志数量(条数)
  10. SystemMaxUse=10G # 最大占用空间 10G
  11. SystemMaxFileSize=200M # 单日志文件最大 200M
  12. MaxRetentionSec=2week # 日志保存时间 2 周
  13. ForwardToSyslog=no # 不将日志转发到 syslog
  14. EOF
  15. # systemctl restart systemd-journald

2.7、设置kube-proxy开启ipvs的前置条件

  1. # modprobe br_netfilter
  2. # cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  3. #!/bin/bash
  4. modprobe -- ip_vs
  5. modprobe -- ip_vs_rr
  6. modprobe -- ip_vs_wrr
  7. modprobe -- ip_vs_sh
  8. modprobe -- nf_conntrack_ipv4
  9. EOF
  10. # chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.8、安装 Docker 软件

  1. # yum -y install yum-utils device-mapper-persistent-data lvm2
  2. #yum -y install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
  3. # yum -y install docker-ce
  4. # mkdir /etc/docker 创建 /etc/docker 目录
  5. 配置 daemon
  6. # cat > /etc/docker/daemon.json <<EOF
  7. {
  8. "exec-opts": ["native.cgroupdriver=systemd"],
  9. "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  10. "log-driver": "json-file",
  11. "log-opts": {
  12. "max-size": "100m"
  13. }
  14. }
  15. EOF
  16. # mkdir -p /etc/systemd/system/docker.service.d
  17. # systemctl daemon-reload && systemctl restart docker && systemctl enable docker

2.9、安装 Kubeadm

  1. # yum -y install kubeadm-1.18.0 kubectl-1.18.0 kubelet-1.18.0
  2. # systemctl enable kubelet.service

2.10、初始化Master节点

  1. # kubeadm config print init-defaults > kubeadm-config.yaml
  2. 进行如下修改:
  3. localAPIEndpoint:
  4. advertiseAddress: 192.168.2.20
  5. ···
  6. kubernetesVersion: v1.15.1
  7. ···
  8. networking:
  9. podSubnet: "10.244.0.0/16"
  10. serviceSubnet: 10.96.0.0/12
  11. ---
  12. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  13. kind: KubeProxyConfiguration
  14. featureGates:
  15. SupportIPVSProxyMode: true
  16. mode: ipvs

完整配置文件如下(注意格式):

  1. apiVersion: kubeadm.k8s.io/v1beta2
  2. bootstrapTokens:
  3. - groups:
  4. - system:bootstrappers:kubeadm:default-node-token
  5. token: abcdef.0123456789abcdef
  6. ttl: 24h0m0s
  7. usages:
  8. - signing
  9. - authentication
  10. kind: InitConfiguration
  11. localAPIEndpoint:
  12. advertiseAddress: 192.168.2.20
  13. bindPort: 6443
  14. nodeRegistration:
  15. criSocket: /var/run/dockershim.sock
  16. name: master
  17. taints:
  18. - effect: NoSchedule
  19. key: node-role.kubernetes.io/master
  20. ---
  21. apiServer:
  22. timeoutForControlPlane: 4m0s
  23. apiVersion: kubeadm.k8s.io/v1beta2
  24. certificatesDir: /etc/kubernetes/pki
  25. clusterName: kubernetes
  26. controllerManager: {}
  27. dns:
  28. type: CoreDNS
  29. etcd:
  30. local:
  31. dataDir: /var/lib/etcd
  32. imageRepository: k8s.gcr.io
  33. kind: ClusterConfiguration
  34. kubernetesVersion: v1.15.1
  35. networking:
  36. dnsDomain: cluster.local
  37. podSubnet: "10.244.0.0/16"
  38. serviceSubnet: 10.96.0.0/12
  39. scheduler: {}
  40. ---
  41. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  42. kind: KubeProxyConfiguration
  43. featureGates:
  44. SupportIPVSProxyMode: true
  45. mode: ipvs

2.11、安装配置集群

  1. - 安装Master
  2. # kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
  3. - 添加 --upload-certs 参数可以在后续执行加入节点时自动分发证书文件。追加的 tee kubeadm-init.log 用以输出日志
  4. # mkdir -p $HOME/.kube
  5. # cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  6. # chown $(id -u):$(id -g) $HOME/.kube/config
  7. - 安装flannel网络:
  8. (官网地址:https://github.com/coreos/flannel)
  9. # wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  10. # kubectl apply -f kube-flannel.yml
  11. - Node节点加入: 注意下面这条命令在安装完Master后会输出在屏幕上
  12. # kubeadm join 192.168.2.20:6443 --token abcdef.0123456789abcdef \
  13. --discovery-token-ca-cert-hash sha256:424676564f3a33bc1d7d9451a322613188e39dcaa004386b453794d8135adaad
  14. - kubectl有很多子命令和参数,为了提高使用命令行的效率,通常建议安装 kebectl bash 命令补全脚本:
  15. # source <(kubectl completion bash)
  16. # echo "source <(kubectl completion bash)" >> ~/.bashrc

2.12、查看集群状态

  1. # kuberctl get nodes -o wide

集群可用性验证

  1. # cat pod.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: nginx
  6. labels:
  7. app: web
  8. spec:
  9. containers:
  10. - name: nginx
  11. image: docker.io/nginx
  12. ports:
  13. - containerPort: 80
  14. # kubectl create -f pod.yaml

通过命令查看是否创建成功: kubectl get pod -o wide

通过修改容器名称将nginx修改为nginx-1后,创建第二个pod资源后查看:

通过curl命令查看服务是否可以正常被访问:

三、集群版本更新

这里演示的是以 K8S 1.15版本为例,具体的版本升级以你们自己实验机上安装的版本号为准!!!

kubeadm提供了upgrade命令用于对kubeadm安装的Kubernetes集群进行升级,但是开始之前需要注意,虽然kubeadm的升级不会触及工作负载,但还是要在升级之前做好备份,升级过程可能会因为Pod的变化而造成容器重启。

首先执行 kubeadm upgrade plan 命令:

可以看到,我们当前使用的版本为1.15.1,最新的稳定版本为1.15.7,并且告知我们,如果想要进行升级操作,那么首先我们需要将kubeadm升级为1.15.7版本,然后执行升级命令。

执行命令 yum -y install kubeadm-1.15.7 进行升级

将kubeadm升级完成后我们执行 kubeadm upgrade apply v1.15.7 升级命令,系统询问,是否进行更新输入 Y 回车

等待片刻后,升级完成

然后再将 kubectl 与 kubelet 进行升级,然后重启 kubelet 后,查看节点版本已经升级为1.15.7


查看组件状态


该分类下的相关小册推荐: