作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们上一小节讲解了k8s的中的一些概念,本小节k8s的安装进行讲解,主要分2小节来讲解,一个是基于docker的版本,一个是基于containerd。
Kubernetes的安装
Kubernetes提供了多种安装方式,可以根据你的需求和实际情况选择合适的方式。以下是几种常见的安装方式:
- kubeadm安装方式:
-
使用kubeadm工具进行快速安装和配置Kubernetes集群。
-
适用于测试和开发环境,以及小型生产环境。
-
需要手动安装和配置一些必要的组件和插件,如网络插件。
-
可以通过kubeadm init和kubeadm join命令初始化和加入节点。
-
这个也本人使用最多的安装方式。
- kops安装方式:
-
使用kops工具在云平台上(如AWS、GCP)快速创建和管理Kubernetes集群。
-
提供自动化的集群生命周期管理功能,如创建、更新和删除集群。
-
需要进行一些配置和准备工作,如设置DNS、创建SSH密钥等。
-
可以通过kops create cluster和kops update cluster等命令来创建和更新集群。
- kubespray安装方式:
-
使用kubespray(之前称为kube-ansible)工具通过Ansible脚本在裸机或虚拟机上部署Kubernetes集群。
-
支持多种操作系统和发行版,如Ubuntu、CentOS等。
-
需要一些准备工作,如设置SSH密钥、配置主机清单等。
-
可以通过运行Ansible脚本来自动安装和配置集群。
- Managed Kubernetes服务:
-
公有云提供商如AWS(Amazon EKS)、Azure(Azure Kubernetes Service)和Google Cloud Platform(Google Kubernetes Engine)等提供托管的Kubernetes服务。
-
可以直接使用云平台的控制台或API来创建和管理Kubernetes集群。
-
提供高可用性、自动缩放和备份等功能,提升了管理的便捷性。
-
需要根据云平台的文档和指导进行操作。
这些只是几种常见的安装方式,还有其他的安装方式和工具可供选择,如Minikube、MicroK8s等。选择适合你的环境和需求的安装方式,可以根据实际情况进行评估和决策。
Kubeadm安装部署
生产集群都是以至少以3台机器准来部署高可用集群,如果是测试环境则1台即可,本文档则以1+1来实现配置。
IP地址
角色
主机名
192.168.31.211
master
master01
192.168.31.212
node
node01
准备工作
1.操作系统
如果没有特殊的要求,可直接用Centos,本次操作也是Centos7.9,也不用单独升级内核,由于是普通测试集群,所以不考虑那些。
2.初始化
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#修改主机名,可根据需要自己规划名字
hostnamectl set-hostname master01
hostnamectl set-hostname node01
#关闭swap,并取消开启启动(如果没有可忽略)
swapoff -ased -ri 's/.*swap.*/#&/' /etc/fstab
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#修改hosts,注意替换自己的ip地址
echo "192.168.31.210 master01" >>/etc/hosts
echo "192.168.31.211 node01" >>/etc/hosts
#调整内核参数
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/kubernetes.conf
sysctl --system
#以上操作2台虚拟机均需要,
#重启,重启是为了让哪些参数能够自动生效。
reboot
部署
1.安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce-20.10.24-3.el7
#这里选择的版本就是k8s支持的最后支持docker版本
2.配置docker
exec-opts 该参数是必选,其他可根据实际需要选填。后面的说明需要在真实应用去掉。
主要包括,修改docker主目录,修改默认仓库地址,修改仓库端口是为http,而非默认的https;修改docker的仓库证书不被信任及修改dockers日志的轮询规则。
{
"data-root": "/new/docker/main/directory", #修改 Docker 主目录
"registry-mirrors": ["http://myregistry.example.com:5000"], # 修改默认仓库地址和端口(HTTP)
"insecure-registries": ["myregistry.example.com:5000"], # 添加不信任的仓库
"exec-opts": ["native.cgroupdriver=systemd"], # 和kubelet保持一致,该选项必须
"log-driver": "json-file", # 设置日志驱动为 json-file
"log-opts": { # 设置日志轮询规则
"max-size": "10m", # 单个日志文件最大 10MB
"max-file": "3" # 仅保留最新的 3 个日志文件
}
}
3.安装Kubernetes基础软件
#配置源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubeadm,kubelet,kubectl,这里选择你的是最后一个支持Docker运行时的版本,如果不加版本号则是最新版本。
yum install -y kubeadm-1.23.12 kubelet-1.23.12 kubectl-1.23.12
4.启动Docker,Kubelet
systemctl start docker kubelet
systemctl enable docker kubelet
5.部署Master
默认Kubernetes所需要的镜像是是在国外的,所以如果不具有科学上网的情况下,有2种方法来实现:1.提前从其他地方将下载好的镜像,导入到本地。2.使用阿里云的镜像源地址。
kubeadm init \
--apiserver-advertise-address=192.168.31.211 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.12 \
--pod-network-cidr=10.244.0.0/16
#此处版本注意和上面的版本保持一致。
这个过程中会先下载镜像,完整的镜像如下图。
6.配置kubectl配置文件
#也是上面第一个红框的内容
#kubectl默认是http协议走8080端口
#配置这个下面以后就走https 6443端口
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo
chown $(id -u):$(id -g) $HOME/.kube/config
7. 确认集群安装成功
[root@master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 47m v1.23.12
[root@master01 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6d8c4cb4d-v8mwg 1/1 Running 0 47m
kube-system coredns-6d8c4cb4d-v94sl 1/1 Running 0 47m
kube-system etcd-master01 1/1 Running 4 48m
kube-system kube-apiserver-master01 1/1 Running 4 48m
kube-system kube-controller-manager-master01 1/1 Running 4 48m
kube-system kube-proxy-5b8wk 1/1 Running 0 47m
kube-system kube-scheduler-master01 1/1 Running 6
8.添加node节点
#就是安装过程中最后的红框
kubeadm join 192.168.31.211:6443 --token iwp8wv.1d51yeapj47n38up \
--discovery-token-ca-cert-hash sha256:0eda99d94d64349caf2b4022a7760a4a99f7174ce2c882a427ff90aeb469a9c6
上面的token只有24小时有效期,如果过了有效期还要添加节点则需要重新生成token。
#创建新
tokenkubeadm token create --print-join-command
9.再次查看node节点
[root@master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 53m v1.23.12
node01 Ready <none> 2m4s v1.23.12
10.添加网络插件
#这个操作会有2个镜像更新,无法下载可以联系我获取
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#我这也是中转下载的,然后上传到这个服务器。
[root@master01 ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
到这里集群就算搭建完成,剩下的就是使用。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。