目录
1. Kubeadm简介
kubeadm是k8s官方提供的,用于新入门人员快速部署一套kubernetes集群的一种简单的方法
2. 本次操作的机器配置
- 两台1核2G的阿里云
- centos 7.6
- 内网互通
配置远低于官方的要求,但是用于学习用途足矣
3. 部署步骤
- 以下不做特殊说明默认所有机子都执行
3.1 准备工作
# 更新系统和软件包
yum update
# 设置主机名(master node 名字分开)
hostnamectl set-hostname k8s-master
# 同步时间
systemctl restart chronyd
# 添加host
# 以下ip是两台机子的内网ip
cat >> /etc/hosts <<EOF
172.19.227.80 k8s-master
172.19.138.68 k8s-node01
EOF
# 设置两台机子间无密码访问
ssh-keygen -t rsa
ssh-copy-id root@k8s-master
ssh-copy-id root@k8s-node01
# 关闭防火墙和iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl stop iptables.service
systemctl disable iptables.service
# 关闭SELinux
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/‘ /etc/selinux/config
# 关闭swap
swapoff -a
sed -i ‘/ swap / s/^\(.*\)$/#\1/g‘ /etc/fstab
3.2 安装docker
# master执行以下转到repo目录
cd /etc/yum.repos.d/
# master执行下载docker阿里云镜像
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# master同步到其他服务器
scp docker-ce.repo k8s-node01:/etc/yum.repos.d/
# 安装docker(各个都要装)
yum -y install docker-ce
# 修改配置
nano /usr/lib/systemd/system/docker.service
# master增加一行如下
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
# 配置阿里云镜像加速
sudo mkdir -p /etc/docker
# 注意这里的链接要换成自己账号的镜像加速
sudo tee /etc/docker/daemon.json <<-‘EOF‘
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
# 重启docker
systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl restart docker
3.3 安装kubeadm, kubectl, kubelet
# master执行以下
cd /etc/yum.repos.d/
nano kubernetes.repo
# 添加如下内容
[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
# master检查仓库
yum repolist
yum list all | grep "^kube"
# master执行安装
yum install kubeadm kubelet kubectl -y
# 检查安装
rpm -ql kubectl
rpm -ql kubeadm
# master上把仓库拷贝过去
cd /etc/yum.repos.d/
scp kubernetes.repo k8s-node01:/etc/yum.repos.d/
# 所有node安装kubelet kubeadm
yum install kubelet kubeadm -y
# master和node执行以下
systemctl enable kubelet.service
# master查看所需的镜像
kubeadm config images list
# 所有机器都执行以下的拉取镜像的操作
# 由于kubeadm依赖国外的k8s.gcr.io的镜像,国内被墙所以这边的解决方案是下载国内的镜像重新打tag的方式
docker pull lzw5399/kube-proxy:v1.18.3
docker pull lzw5399/kube-apiserver:v1.18.3
docker pull lzw5399/kube-controller-manager:v1.18.3
docker pull lzw5399/kube-scheduler:v1.18.3
docker pull lzw5399/coredns:1.6.7
docker pull lzw5399/etcd:3.4.3-0
docker pull lzw5399/pause:3.2
# 修改tag
docker tag lzw5399/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag lzw5399/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag lzw5399/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag lzw5399/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag lzw5399/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
docker tag lzw5399/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag lzw5399/pause:3.2 k8s.gcr.io/pause:3.2
# 移除没用的镜像
docker rmi lzw5399/kube-proxy:v1.18.3
docker rmi lzw5399/kube-apiserver:v1.18.3
docker rmi lzw5399/kube-controller-manager:v1.18.3
docker rmi lzw5399/kube-scheduler:v1.18.3
docker rmi lzw5399/coredns:1.6.7
docker rmi lzw5399/etcd:3.4.3-0
docker rmi lzw5399/pause:3.2
3.4 master初始化kubeadm
# master执行init初始化
kubeadm init --kubernetes-version="v1.18.3" --pod-network-cidr="10.244.0.0/16" --ignore-preflight-errors="NumCPU"
# 后续步骤
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 应用网络插件flannle
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3.5 node加入集群
# 加入集群
# 这里具体的语句在master上init成功后就会通过log打印出来,直接复制到node上用就好了
kubeadm join 172.19.227.80:6443 --token vdyayi.ghs1zut7yxd94vru --discovery-token-ca-cert-hash sha256:fcdaaaf7411b786e3d5bb77c1d190e278a2952e1f415012cfdeea31c0af7547b --v=4
3.6 查看部署状态
# master查看node节点状态
kubectl get nodes
# master查看kube-system命名空间下的pod启动的状态
kubectl get po -n kube-system
# 如果有pod一直启动不起来,通过describe查看状态
kubectl describe po/{具体的pod名字} -n kube-system