文章目录
1. 安装方式
- kubeadm
kubeadm是官⽅社区推出的⼀个⽤于快速部署kubernetes集群的⼯具。
这个⼯具能通过两条指令完成⼀个kubernetes集群的部署:
# 创建⼀个 Master 节点
$ kubeadm init
# 将⼀个 Node 节点加⼊到当前集群中
$ kubeadm join <Master节点的IP和端⼝>
官方地址:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- 二进制包
从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
2. 安装要求
- ⾄少3台机器,操作系统 CentOS7+
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘20GB或更多
- 集群中所有机器之间⽹络互通
- 可以访问外⽹,需要拉取镜像
- 禁⽌swap分区
环境说明
角色 | 系统 | IP | 所需组件 |
---|---|---|---|
k8s-master | centos 8 | 192.168.249.141 | docker kubeadm kubelet kubectl |
k8s-node1 | centos 8 | 192.168.249.145 | docker kubeadm kubelet kubectl |
k8s-node2 | centos 8 | 192.168.249.147 | docker kubeadm kubelet kubectl |
//所有主机关闭防火墙和selinux
# systemctl disable --now firewalld
# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
//关闭swap分区
# swapoff -a # 临时
# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
//修改主机名
hostnamectl set-hostname <hostname>
//添加hosts
cat >> /etc/hosts << EOF
192.168.249.141 k8s-master master.example.com
192.168.249.145 k8s-node1 node1.example.com
192.168.249.147 k8s-node2 node2.example.com
EOF
//将桥接的IPv4流量传递到iptables的链
# cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
//立即生效
# sysctl --system
//时间同步
# yum -y install chrony
# systemctl enable --now chronyd
//设置免密登录
# ssh-keygen -t rsa
# ssh-copy-id k8s-master
# ssh-copy-id k8s-node1
# ssh-copy-id k8s-node2
//重启使配置生效
# reboot
3. 所有节点安装Docker/kubeadm/kubelet
Kubernetes默认CRI(容器运⾏时)为Docker,因此先安装Docker。
3.1 安装Docker
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# yum -y install docker-ce
# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": ["https://1gnt5vnf.mirror.aliyuncs.com"]
> }
> EOF
# systemctl enable --now docker
3.2 配置 kubernetes 阿里云yum源
# vim /etc/yum.repos.d/kubernetes.repo
[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
3.3 安装kubeadm,kubelet和kubectl
由于版本更新频繁,这⾥指定版本号部署
# yum -y install kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
# systemctl enable kubelet
4. 部署 k8s-master
# kubeadm init \
--apiserver-advertise-address=192.168.249.141 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
如果执行上面命令也就是初始化第一遍没有成功,再次执行则会报错,需要先执行以下命令。
# kubeadm reset
由于默认拉取镜像地址k8s.gcr.io国内⽆法访问,这⾥指定阿⾥云镜像仓库地址。
使⽤kubectl⼯具:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.example.com NotReady control-plane,master 6m37s v1.20.0
5. 安装Pod⽹络插件(CNI)
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
确保能够访问到 quay.io 这个registery
6. 部署 k8s-node1 k8s-node2
向集群添加新节点,执⾏在 kubeadm init 输出的 kubeadm join 命令:
# kubeadm join 192.168.249.141:6443 --token e45amd.ixsq8wvk0hy0cama \
--discovery-token-ca-cert-hash sha256:0e976cb17f8a119ac0a2ca292ebf25041c3164c7e551afbd99c8611ca8e8c9f7
7. 测试 kubernetes 集群
# kubectl create deployment nginx --image=nginx
# kubectl expose deployment nginx --port=80 --type=NodePort
# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6799fc88d8-jgk25 1/1 Running 0 10h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10h
service/nginx NodePort 10.102.195.230 <none> 80:31410/TCP 10h
访问