Centos7 用kubeadm安装kubernetes
192.168.10.147 kubernetes-master-01
192.168.10.129 kubernetes-master-02
192.168.10.146 kubernetes-master-03
192.168.10.148 kubernetes-node-01
192.168.10.150 kubernetes-node-02
192.168.10.149 kubernetes-node-03
192.168.10.222 vip
注:在所有节点上进行如下操作
设置主机名 master设置为master node设置为node
hostnamectl set-hostname kubernetes-master-01
需要设置其他主机名称时,可将 master 替换为正确的主机名node1、node2即可。
编辑 /etc/hosts 文件,添加解析
cat <<EOF >>/etc/hosts
192.168.10.147 kubernetes-master-01
192.168.10.129 kubernetes-master-02
192.168.10.146 kubernetes-master-03
192.168.10.148 kubernetes-node-01
192.168.10.150 kubernetes-node-02
192.168.10.149 kubernetes-node-03
EOF
关闭防火墙、selinux和swap。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
配置内核参数,将桥接的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
执行下面命令 临时生效 重启失效
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
创建/etc/sysconfig/modules/ipvs.modules内容如下
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
在/etc/rc.d/rc.local下添加一条
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
执行chmod +x /etc/rc.d/rc.local
配置国内yum源
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
配置国内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
配置 docker 源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
注:在所有节点上进行如下操作
安装docker
yum install -y docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
Docker version 18.06.1-ce, build e68fc7a
docker服务为容器运行提供计算资源,是所有容器运行的基本平台。
安装kubeadm、kubelet、kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。
安装的版本可以用kubeadm version查看
安装happroxy和keepalived
cd /opt
创建haproxy-start.sh如下
#!/bin/bash # -----------------修改 Master 地址 MasterIP1=192.168.10.147 MasterIP2=192.168.10.129 MasterIP3=192.168.10.146
# ----------------- kube-apiserver 默认端口 6443 不需要修改 MasterPort=6443 HaproxyPort=6444
# 启动 docker run -d --restart=always --name=HAProxy -p $HaproxyPort:$HaproxyPort \ -e MasterIP1=$MasterIP1 \ -e MasterIP2=$MasterIP2 \ -e MasterIP3=$MasterIP3 \ -e MasterPort=$MasterPort \ wise2c/haproxy-k8s |
创建keepalived-start.sh如下
#!/bin/bash # ----------------- 修改虚拟 IP 地址 VIRTUAL_IP=192.168.10.222 # ----------------- 网卡名 INTERFACE=ens192 # ----------------- 子网掩码 NETMASK_BIT=24 # ----------------- HAProxy 暴露端口,内部指向 kube-apiserver 的 6443 端口 CHECK_PORT=6444 # ----------------- 路由标识符 RID=10 # ----------------- 虚拟路由标识符 VRID=160 # ----------------- IPV4 多播地址,默认 224.0.0.18 MCAST_GROUP=224.0.0.18
docker run -itd --restart=always --name=Keepalived \ --net=host --cap-add=NET_ADMIN \ -e VIRTUAL_IP=$VIRTUAL_IP \ -e INTERFACE=$INTERFACE \ -e CHECK_PORT=$CHECK_PORT \ -e RID=$RID \ -e VRID=$VRID \ -e NETMASK_BIT=$NETMASK_BIT \ -e MCAST_GROUP=$MCAST_GROUP \ wise2c/keepalived-k8s |
给脚本附加执行权限
chmod +x *.sh
将脚本复制到各个master节点
cd /opt
scp -r * 192.168.10.129:/opt/
scp -r * 192.168.10.146:/opt/
3台虚拟机上均执行2个脚本
sh haproxy-start.sh
sh keepalived-start.sh
部署master 节点
注:在master-01节点上进行如下操作
创建kubeadm.yml内容如下
apiVersion: kubeadm.k8s.io/v1beta1 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: # -------- 修改为 当前Master 节点ip advertiseAddress: 192.168.10.147 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock # 当前master节点 name: kubernetes-master-01 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta1 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes # -------- 修改为 VIP controlPlaneEndpoint: "192.168.10.222:6444" controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd # 这里的仓库地址是阿里云仓库 imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.15.2 networking: dnsDomain: cluster.local # -------- 这里使用的是flannel 网络,默认网段 podSubnet: 10.244.0.0/16 scheduler: {} --- # -------- 开启 ipvs apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: true mode: ipvs |
kubeadm init --config=kubeadm.yml --experimental-upload-certs
配置kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config kubectl get nodes
查看所有namespace 是否ready
kubectl get pods --all-namespaces
部署flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
这里可以先下载下来 然后-f 指定文件
部署其余master节点
注:在其余所有master节点上进行如下操作
执行如下命令,使所有node节点加入Kubernetes集群
kubeadm join 192.168.10.222:6444 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:052fe13053db89f08212a9aa897f9c7d147a20f02a325ed9e037c031b15f4ab6 \
> --control-plane --certificate-key 1cf7b67d154bccf9c59c30e167a4aa2344a2e152f7d2b198799a0e7056d78f67
查看集群状态
kubectl get node
部署node节点
执行如下命令,使所有node节点加入Kubernetes集群
kubeadm join 192.168.10.222:6444 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:052fe13053db89f08212a9aa897f9c7d147a20f02a325ed9e037c031b15f4ab6
全部添加完之后 在master上查看
kubectl get node
高可用目前创建完毕