服务器列表
服务器名 | 服务器IP | 服务器配置 | 角色 |
---|---|---|---|
d-master | 172.17.3.146 | 4C 8G | master |
d-worker01 | 172.17.3.151 | 4C 8G | worker |
d-worker02 | 172.17.3.152 | 4C 8G | worker |
系统:CentOS Linux release 7.9.2009
一、基础优化所有节点执行
1.1、修改主机名
echo "d-master" >/etc/hostname
hostname d-master
1.2、安装常用包
yum install net-tools gcc bash-completion -y
source /etc/profile.d/bash_completion.sh
1.3、提示符高亮
cp /root/.bashrc /root/.bashrc.bak
cat >> /root/.bashrc <<EOF
PS1="\[\e[32;1m\][\u@\h \W]\\$ \[\e[0m\]"
EOF
#生效配置文件
source /root/.bashrc
1.4、更新yum安装源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
1.5、同步主机时间
yum install ntp -y
systemctl enable ntpd.service
systemctl start ntpd.service
systemctl status ntpd.service
1.6、关闭swap,注释swap分区
swapoff -a
vim /etc/fstab
1.7、配置内核参数,将桥接的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
二、安装docker-ce
所有节点安装
2.1 安装依赖包
$ yum install -y yum-utils device-mapper-persistent-data lvm2
2.2 设置Docker源
$ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3 docker安装版本查看
yum list docker-ce --showduplicates | sort -r
2.4 安装docker
$ yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
指定安装的docker版本为18.09.9
2.5 启动Docker
$ systemctl start docker && systemctl enable docker
2.6 镜像加速
由于Docker Hub的服务器在国外,下载镜像会比较慢,可以配置镜像加速器。主要的加速器有:Docker官方提供的中国registry mirror、阿里云加速器、DaoCloud 加速器,本文以阿里加速器配置为例。
配置daemon.json文件
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sx67cqfl.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
2.7 验证
docker --version
2.8 修改Cgroup Driver
修改daemon.json,新增‘”exec-opts”: [“native.cgroupdriver=systemd”’
$ vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
#重新加载docker
$ systemctl daemon-reload && systemctl restart docker.service
修改cgroupdriver是为了消除告警:
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
[
](https://kubernetes.io/docs/setup/cri/)
三、k8s安装
control plane和work节点都执行本部分操作。
3.1 添加阿里kubernetes源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3.2 版本查看
yum list kubelet --showduplicates | sort -r
3.3 安装kubelet、kubeadm和kubectl
$ yum clean all && yum -y makecache
$ yum install -y kubelet-1.18.9 kubeadm-1.18.9 kubectl-1.18.9
如果不加版本号,默认安装最新版本,如果安装错误,可以使用yum remove kubectl kubelet kubeadm 移除,重新安装。
如果安装其他版本kubernetes时,请确认docker-ce和当前的kubernetes的版本相匹配,具体可查询:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#dependencies-11
3.4 启动kubelet
启动kubelet并设置开机启动
systemctl enable kubelet && systemctl start kubelet
第一次安装k8s,未经过kubeadm init 或者 kubeadm join后,kubelet状态是未启动,这个是正常现象,执行init或join后问题会自动解决,此时不用理会kubelet.service
3.5 kubectl命令补全
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile
四、初始化k8s 集群
master节点执行
4.1 查询kubeadm config所需的镜像
$ kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.18.9
k8s.gcr.io/kube-controller-manager:v1.18.9
k8s.gcr.io/kube-scheduler:v1.18.9
k8s.gcr.io/kube-proxy:v1.18.9
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
4.2 下载镜像
vim images.sh
#!/bin/bash
url=registry.cn-beijing.aliyuncs.com/api_public
version=v1.18.9
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
docker pull $url/$imagename
done
url为阿里云镜像仓库地址,我已经提前下载并上传,version为安装的kubernetes版本。
#运行脚本image.sh,下载指定版本的镜像
$ chmod a+x images.sh && ./image.sh
$ docker images
4.3 master初始化
kubeadm init --kubernetes-version=1.18.9 \
--apiserver-advertise-address=172.17.3.146 \
--image-repository registry.cn-beijing.aliyuncs.com/api_public \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
注:此处image-repository 也可为 registry.aliyuncs.com/google_containers
记录kubeadm join的输出,后面需要这个命令将work节点和其他control plane节点加入集群中。
#注意这里的结果每次输出会不同,不能直接复制下面的结果执行。
kubeadm join 172.17.3.146:6443 --token o68ntb.dbgizeo4vl90x18v \
--discovery-token-ca-cert-hash sha256:5176be0c6f3cd95cbf6d2f4520ce39e6e635d8c41b2887e0b3fb44b28a505dec
如果初始化失败,可执行kubeadm reset后重新初始化
$ kubeadm reset
$ rm -rf $HOME/.kube/config
4.4 加载环境变量
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
$ source .bash_profile
本文所有操作都在root用户下执行,若为非root用户,则执行如下操作:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4.5 安装flannel网络
在master上新建flannel网络
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
查询部署
$ kubectl get pod,service -n kube-system
五、worker节点加入集群
5.1 worker节点加入集群(worker节点执行)
获取上面4.3 master初始化生成的work节点加入集群的命令
kubeadm join 172.17.3.146:6443 --token o68ntb.dbgizeo4vl90x18v \
--discovery-token-ca-cert-hash sha256:5176be0c6f3cd95cbf6d2f4520ce39e6e635d8c41b2887e0b3fb44b28a505dec
此时worker节点会拉取kube-proxy,pause,flannel镜像并启动两个pod容器,在worker节点使用docker ps可以看出两个容器正在启动。
5.2 集群节点查看 (master控制节点执行)
根据网络和服务器配置不同,worker节点经过几分钟初始化后,master节点上即可查看节点状态。
$ kubectl get nodes
$ kubectl get pod -n kube-system