此方法可通过kubeadm.yaml文件中的kubernetesVersion选项修改安装的k8s集群版本,可手动选择要安装的docker版本
系统版本
CentOS Linux release 7.6.1810 (Core)
内核版本
3.10.0-957.1.3.el7.x86_64
主机配置
三台主机均为虚拟机(虚拟化环境VMware VSphere6.0):
CPU:8核 内存:8G 磁盘:100G
部署架构
etcd:10.0.10.63 #使用kubeadm自动部署ETCD
kubernetes集群:
master:10.0.10.63
node1:10.0.10.64
node2:10.0.10.65
时间同步
ntpdate ntp.aliyun.com
关闭selinux
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config ; cat /etc/selinux/config | grep disabled
setenforce 0
关闭防火墙和NetworkManager
systemctl stop firewalld NetworkManager ; systemctl disable firewalld NetworkManager
关闭swap分区
swapoff -a
mv /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
echo "vm.swappiness = 0">> /etc/sysctl.conf
配置HOST
10.0.10.63 k8s-master
10.0.10.64 k8s-node1
10.0.10.65 k8s-node2
修改主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
修改内核参数
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
使修改生效
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
proxy开启ipvs模式(可选)
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
安装ipvs管理工具(可选)
yum install -y ipset ipvsadm
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
查看docker版本
yum list docker-ce --showduplicates
选择合适版本安装
yum install -y docker-ce-18.09.9-3.el7
systemctl enable docker.service
systemctl start docker
修改/etc/docker/daemon.json
使用网易的docker镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启docker并验证配置
systemctl restart docker
docker info | grep Cgroup
添加kubernetes源
使用阿里云yum源
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
安装kubeadm
yum makecache fast
yum install -y kubelet kubeadm kubectl
创建集群初始化配置
kubeadm config print init-defaults
修改必要的配置参数
token
advertiseAddress
imageRepository
dnsDomain
serviceSubnet
podSubnet
修改后配置如下:
vim kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.0.10.63
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.15.0
networking:
dnsDomain: domain.local
serviceSubnet: 172.16.0.0/12
podSubnet: 1.0.0.0/8
scheduler: {}
创建master节点
kubeadm init --config kubeadm.yaml
创建kubectl配置文件(创建master节点后生成,在集群中永久有效,需妥善保存)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
在其他node节点执行如下命令(创建master节点后生成,在集群中永久有效,需妥善保存)
kubeadm join 10.0.10.63:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:ebe505f8d355c6d13afd39ae8057a97e7e0f1b86f130cfe6a2288d676123b283
可使用以下命令重置集群
kubeadm reset
添加集群网络服务
1、下载flannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2、修改flannel的子网配置
net-conf.json: |
{
"Network": "1.0.0.0/8", #此处修改为podSubnet的子网配置
"Backend": {
"Type": "vxlan"
}
}
3、创建flannel服务
kubectl apply -f kube-flannel.yml
查看集群状态
[root@k8s-master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
[root@k8s-master ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready master 10d v1.15.3 10.0.10.63 <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.9
k8s-node1 Ready <none> 10d v1.15.3 10.0.10.64 <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.9
k8s-node2 Ready <none> 10d v1.15.3 10.0.10.65 <none> CentOS Linux 7 (Core) 3.10.0-957.1.3.el7.x86_64 docker://18.9.9
[root@k8s-master ~]# kubectl cluster-info
Kubernetes master is running at https://10.0.10.63:6443
KubeDNS is running at https://10.0.10.63:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@k8s-master ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-bccdc95cf-6dqhb 1/1 Running 0 10d 1.0.0.10 k8s-master <none> <none>
kube-system coredns-bccdc95cf-th9tb 1/1 Running 0 10d 1.0.0.11 k8s-master <none> <none>
kube-system etcd-k8s-master 1/1 Running 0 10d 10.0.10.63 k8s-master <none> <none>
kube-system kube-apiserver-k8s-master 1/1 Running 0 10d 10.0.10.63 k8s-master <none> <none>
kube-system kube-controller-manager-k8s-master 1/1 Running 0 10d 10.0.10.63 k8s-master <none> <none>
kube-system kube-flannel-ds-amd64-nrhkr 1/1 Running 0 10d 10.0.10.64 k8s-node1 <none> <none>
kube-system kube-flannel-ds-amd64-rf8vs 1/1 Running 0 10d 10.0.10.65 k8s-node2 <none> <none>
kube-system kube-flannel-ds-amd64-s7szj 1/1 Running 0 10d 10.0.10.63 k8s-master <none> <none>
kube-system kube-proxy-9f57c 1/1 Running 0 9d 10.0.10.63 k8s-master <none> <none>
kube-system kube-proxy-f8cwg 1/1 Running 0 10d 10.0.10.64 k8s-node1 <none> <none>
kube-system kube-proxy-qkctn 1/1 Running 0 9d 10.0.10.65 k8s-node2 <none> <none>
kube-system kube-scheduler-k8s-master 1/1 Running 0 10d 10.0.10.63 k8s-master <none> <none>
**
如有人知道kubeadm怎样使用外部ETCD集群请留言给我,谢谢。
**
参考链接
https://v1-15.docs.kubernetes.io/zh/docs/
https://blog.frognew.com/2019/07/kubeadm-install-kubernetes-1.15.html
https://www.cnblogs.com/hongdada/p/11250293.html
https://ieevee.com/tech/2016/09/28/docker-mirror.html