本次部署使用三台服务器
master:192.168.0.2
node1:192.168.0.4
node2:192.168.0.14
服务器配置均为:CentOS 7.6 64位 8核/16G/100G
介绍一下Docker EE和Docker CE:
Docker EE
Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。
Docker EE提供三个服务层次:
Basic 包含用于认证基础设施的Docker平台,Docker公司的支持,经过 认证的、来自Docker Store的容器与插件。
Standard 添加高级镜像与容器管理,LDAP/AD用户集成,基于角色的访问控制(Docker Datacenter)。
Advanced 添加Docker安全扫描,连续漏洞监控。
Docker CE
Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。
1.设置主机名
hostnamectl set-hostname master
2.yum更换为国内的阿里云yum源
1.进入到yum的源目录下
cd /etc/yum.repos.d/
2.将原来的CentOS-Base.repo进行备份
mv CentOS-Base.repo CentOS-Base.repo.bak
3.下载替换阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
5.生成缓存
yum makecache
6.更新
yum -y update
3.安装Docker CE
1.安装所需包
yum install yum-utils device-mapper-persistent-data lvm2
2.新增 Docker 仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
或者
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装 Docker CE
yum install -y \
containerd.io-1.2.13 \
docker-ce-19.03.11 \
docker-ce-cli-19.03.11
4.创建 /etc/docker 目录
mkdir /etc/docker
5.设置 daemon
cat > /etc/docker/daemon.json <{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
6.为 docker 服务创建一个 systemd 放置目录
mkdir -p /etc/systemd/system/docker.service.d
7.重启 Docker
systemctl daemon-reload
systemctl restart docker
8.设置docker开机自启
sudo systemctl enable docker
4.前置一些操作
1.分别关闭防火墙:
systemctl stop firewalld
2.关闭防火墙自启
systemctl disable firewalld
3.关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
即在 vim /etc/fstab 中注释掉:/dev/mapper/centos-swap swap swap defaults 0 0
5.将桥接的IPv4流量传递到iptables的链
RHEL / CentOS 7上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题。创建/etc/sysctl.d/k8s.conf文件,添加如下内容:
1.配置
cat > /etc/sysctl.d/k8s.conf <.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
2.使配置生效
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
6.添加k8s阿里云YUM软件源
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
7.所有节点安装kubeadm,kubelet和kubectl
1.由于版本更新频繁,这里指定版本号部署:
yum list |grep kubelet
yum list |grep kubeadm
yum list |grep kubectl
yum list |grep kubernetes
yum install -y kubelet-1.20.1-0 kubeadm-1.20.1-0 kubectl-1.20.1-0
systemctl enable kubelet && systemctl start kubelet
2.部署Kubernetes Master【只在master执行】
kubeadm init \
--apiserver-advertise-address=192.168.0.2 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.1 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
3.记录以下内容
kubeadm join 192.168.0.2:6443 --token aek8x6.jm00vkehjbyl3z9p \
--discovery-token-ca-cert-hash sha256:ce7d2a231ef24f0ff39a39cca7f81d8b9542368723bf27fdd0356b83c8630532
4.使用kubectl工具:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
8.安装Pod网络插件(CNI)- master节点,node节点加入后自动下载
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果报错可以尝试
kubectl apply -f https://199.232.68.133/coreos/flannel/master/Documentation/kube-flannel.yml
如果还不行可以尝试
https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
如果还不行找文件自己写上传上去
kubectl apply -f kube-flannel.yml
kubectl get nodes
kubectl get cs
出现这种情况,是/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0,在文件中注释掉就可以了
kube-controller-manager.yaml文件修改:注释掉27行
# - --port=0
kube-scheduler.yaml配置修改:注释掉19行
# - --port=0
systemctl restart kubelet.service
kubectl get pod -n kube-system -o wide