- 1. 基础配置
- sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux
- setenforce 0
- systemctl disable firewalld
- systemctl stop firewalld
- hostnamectl set-hostname master
- vim /etc/hosts
- swapoff -a
- sed -i ‘/swap/d’ /etc/fstab
- !/bin/bash
- 安装指定版本的Docker-CE:
- Step 1: 查找Docker-CE的版本:
- yum list docker-ce.x86_64 —showduplicates | sort -r
- Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
- sudo yum -y install docker-ce-[VERSION]
- 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
- yum list docker-ce-selinux- —showduplicates | sort -r
- sudo yum -y install docker-ce-selinux-[VERSION]
- vim /usr/lib/systemd/system/docker.service
- systemctl daemon-reload
- systemctl restart docker
- yum -y remove kubelet kubeadm kubectl
- cat > /etc/yum.repos.d/kubernetes.repo << EOF
- kubeadm init \
- kubeadm config print init-defaults > kubeadm-init.yml
- cat > kubeadm-init.yaml << EOF
- kubeadm init —config INIT_FILE_PATH
- API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址
- 切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡
- API 服务器绑定的端口,默认 6443
- 保存和存储证书的路径,默认值:”/etc/kubernetes/pki”
- 为控制平面指定一个稳定的 IP 地址或 DNS 名称,
- 这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP
- 选择用于拉取Control-plane的镜像的容器仓库,默认值:”k8s.gcr.io”
- 因 Google被墙,这里选择国内仓库
- 为Control-plane选择一个特定的 Kubernetes 版本, 默认值:”stable-1”
- 指定节点的名称,不指定的话为主机hostname,默认可以不指定
- 指定pod的IP地址范围
- 指定Service的VIP地址范围
- 为Service另外指定域名,默认”cluster.local”
- 将 Control-plane 证书上传到 kubeadm-certs Secret
- rm -f .kube && mkdir .kube
- cp -i /etc/kubernets/admin.conf .kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config //可用于为普通用户分配kubectl权限
- https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml">wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- kubectl apply -f kube-flannel.yml
- vim /etc/NetworkManager/conf.d/calico.conf
1. 基础配置
- 服务器开启硬件虚拟化支持;
关闭SELinux和Firewalld服务;```
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
```
设置hostname并在/etc/hosts配置本地解析;```
hostnamectl set-hostname master
vim /etc/hosts
x.x.x.x master …
- 关闭Swap服务
swapoff -a
sed -i ‘/swap/d’ /etc/fstab
- 修改服务器配置参数(所有机器):```shell
# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
EOF
# modprobe ip_conntrack
# modprobe br_netfilter
# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
# sysctl -p /etc/sysctl.d/k8s.conf
kube-proxy开启ipvs的前置条件:```shell
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
<br />打开文件数:```shell
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
2.Docker配置
- 所有节点安装docker服务:```shell // 移除旧版本 yum -y remove docker-client docker-client-latest docker-common docker-latest docker-logrotate docker-latest-logrotate \ docker-selinux docker-engine-selinux docker-engine
// 安装依赖的软件 yum install -y yum-utils device-mapper-persistent-data lvm2 // 添加yum源 yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo // 更新并安装docker yum makecache fast yum -y install docker-ce
安装指定版本的Docker-CE:
Step 1: 查找Docker-CE的版本:
yum list docker-ce.x86_64 —showduplicates | sort -r
Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
sudo yum -y install docker-ce-[VERSION]
注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
yum list docker-ce-selinux- —showduplicates | sort -r
sudo yum -y install docker-ce-selinux-[VERSION]
- 修改docker配置:```shell
# cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check = true"
],
"registry-mirrors": ["https://4p5gxeik.mirror.aliyuncs.com"]
}
EOF
- 修改docker-service配置:```
vim /usr/lib/systemd/system/docker.service
原文:ExecStart=/usr/bin/dockerd -H fd:// —containerd=/run/containerd/containerd.sock 改为:ExecStart=/usr/bin/dockerd -H fd:// —containerd=/run/containerd/containerd.sock —exec-opt native.cgroupdriver=systemd`` <br />注:如果不修改,在添加worker节点时可能会报错:detected cgroupfs as ths Docker driver.xx` - 重启docker:```
systemctl daemon-reload
systemctl restart docker
```
3.所有节点安装k8s服务
如果已安装过旧版本,需要删除:```
yum -y remove kubelet kubeadm kubectl
```
设置阿里云仓库,并安装新版本;```
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=1 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF ```安装kubelet、kubeadm、kubectl
shell yum -y install kubelet-1.18.8 kubeadm-1.18.8 kubectl-1.18.8
- 启动服务:
systemctl enable kubelet && systemctl start kubelet
<br />
4. 节点部署
- 如果需要初始化旧Master节点,执行
kubeadm reset
4.1 Master初始化
kubeadm init:
可直接使用:kubeadm init
也可以带配置参数:```kubeadm init \
—apiserver-advertise-address 0.0.0.0 \ —apiserver-bind-port 6443 \ —control-plane-endpoint master1.lab.com \ —image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ —kubernetes-version 1.18.2 \ —pod-network-cidr 10.11.0.0/16 \ —service-cidr 10.20.0.0/16 \ —service-dns-domain cluster.local \ ```
使用配置文件init:```shell // 1.使用命令生成初始化文件
kubeadm config print init-defaults > kubeadm-init.yml
// 2.根据实际环境修改文件内容
cat > kubeadm-init.yaml << EOF
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: 172.17.19.209 # 本机IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: 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.cn-hangzhou.aliyuncs.com/google_containers # 国内镜像仓库 kind: ClusterConfiguration kubernetesVersion: v1.18.8 # 版本号 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 # pod子网
scheduler: {}
apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs EOF
kubeadm init —config INIT_FILE_PATH
- 参数说明:
—apiserver-advertise-address 0.0.0.0 \
API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址
切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡
—apiserver-bind-port 6443 \
API 服务器绑定的端口,默认 6443
—cert-dir /etc/kubernetes/pki \
保存和存储证书的路径,默认值:”/etc/kubernetes/pki”
—control-plane-endpoint kuber4s.api \
为控制平面指定一个稳定的 IP 地址或 DNS 名称,
这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP
—image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
选择用于拉取Control-plane的镜像的容器仓库,默认值:”k8s.gcr.io”
因 Google被墙,这里选择国内仓库
—kubernetes-version 1.18.8 \
为Control-plane选择一个特定的 Kubernetes 版本, 默认值:”stable-1”
—node-name master01 \
指定节点的名称,不指定的话为主机hostname,默认可以不指定
—pod-network-cidr 10.244.0.1/16 \
指定pod的IP地址范围
—service-cidr 10.96.0.0/12 \
指定Service的VIP地址范围
—service-dns-domain cluster.local \
为Service另外指定域名,默认”cluster.local”
—upload-certs
将 Control-plane 证书上传到 kubeadm-certs Secret
- 配置kubectl(init成功后会有提示信息):
rm -f .kube && mkdir .kube
cp -i /etc/kubernets/admin.conf .kube/config
chown $(id -u):$(id -g) $HOME/.kube/config //可用于为普通用户分配kubectl权限
<a name="3df4a059"></a>
#### 4.2 安装网络插件
- flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
<br />注:如果yml中的“Network”:"10.244.0.0/16"和kubeadm init xxx --pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。
- calico<br />确保Calico可以在主机上进行管理cali和tunl接口,如果主机上存在NetworkManage,NetworkManager(默认是停用的)会为默认网络名称空间中的接口操作路由表,固定了Calico veth对以连接到容器,可能干扰Calico代理正确路由的能力。
vim /etc/NetworkManager/conf.d/calico.conf
[keyfile] unmanaged-devices=interface-name:cali;interface-name:tunl
<br />默认为IPIP模式,开启BGP模式: `CALICO_IPV4POOL_IPIP -- Never````shell
# wget https://docs.projectcalico.org/manifests/calico.yaml
// 修改参数
# vim calico.yml
// 修改网络,默认为192.168...
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
// 需要添加,指定接口,默认为first-found
- name: IP_AUTODETECTION_METHOD
value: "interface=eth.*"
# kubeclt apply calico.yaml
4.3 Node节点加入
加入节点(init成功后会有提示信息): kubeadm join 172.19.76.55:6443 --token
如果忘记了:kubeadm token create --print-join-command
4.4 kubectl自动补全
# yum -y install bash-completion
# source /usr/share/bash-completion/bash_completion
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> /etc/bashrc
