1、准备工作

Docker       18.09.0
---
kubeadm-1.14.0-0 
kubelet-1.14.0-0 
kubectl-1.14.0-0
---
k8s.gcr.io/kube-apiserver:v1.14.0
k8s.gcr.io/kube-controller-manager:v1.14.0
k8s.gcr.io/kube-scheduler:v1.14.0
k8s.gcr.io/kube-proxy:v1.14.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
---
calico:v3.9.4
​

1) centos7 机器两台,服务器之间能ping通,能连外网

2)更新2台机器 yum源

yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

3)各个机器安装docker

#1、安装必要依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#2、设置docker仓库,若能科学上网可忽略,此处以aliyun为例,可以设置其他或者个人仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3、若使用aliyun,可以添加一下镜像加速器(地址-登陆阿里云-容器管理可得到)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["这边替换成自己的实际地址"]
}
EOF
sudo systemctl daemon-reload
#4、指定版本安装docker
yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
#5、启动docker
sudo systemctl start docker && sudo systemctl enable docker

4)修改各个机器的hosts,方便查看管理,也可忽略

#1、master节点
sudo hostnamectl set-hostname m
vi /etc/hosts #添加以下解析
10.65.110.53 w
10.65.110.33 m
#2、worker节点
sudo hostnamectl set-hostname w
vi /etc/hosts #添加以下解析
10.65.110.53 w
10.65.110.33 m
#3、设置完后,节点互相通过别名能ping通

5)各个服务器配置

# (1)关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
​
# (2)关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
​
# (3)关闭swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
​
# (4)配置iptables的ACCEPT规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
​
# (5)设置系统参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
​
sysctl --system

2、开始安装

1)安装kubeadm

yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0

2) 设置docker和k8s在同一个cgroup

# 1)Docker修改以下文件,在docker启动参数中添加 --exec-opt native.cgroupdriver=systemd
vim /usr/lib/systemd/system/docker.service
# 修改以下行,添加上述命令
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd -H unix://
#重启docker
systemctl restart docker
# 2)修改kubedm
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
#修改后查看 
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=systemd"
#重启服务
systemctl enable kubelet && systemctl start kubelet

3)下载kubeadm所需镜像(科学上网可跳过此步骤)

#查看所需镜像,个人下载的镜像版本和名称要和以下名字严格对应,可通过tag方式,因为kubeadm init时默认是以默认版本镜像部署
sudo kubeadm config images list 
#如下:
k8s.gcr.io/kube-apiserver:v1.14.0
k8s.gcr.io/kube-controller-manager:v1.14.0
k8s.gcr.io/kube-scheduler:v1.14.0
k8s.gcr.io/kube-proxy:v1.14.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1.
# 1、从国内镜像仓库拉取以上版本镜像,并打tag放入个人仓库,入aliyun等,方便其他worker机器获取,
    docker pull ***
    docker tag *** *** 
    docker push ***
    docker login --username=*** ***.com

4)初始化master

# 初始化失败,需执行 kubeadm reset,排错后重新执行以下init
kubeadm init --kubernetes-version=1.14.0 --apiserver-advertise-address=10.65.110.33 --pod-network-cidr=10.244.0.0/16
/* init流程解释
01-进行一系列检查,以确定这台机器可以部署kubernetes

02-生成kubernetes对外提供服务所需要的各种证书可对应目录
/etc/kubernetes/pki

03-为其他组件生成访问kube-ApiServer所需的配置文件
    ls /etc/kubernetes/
    admin.conf  controller-manager.conf  kubelet.conf  scheduler.conf
    
04-为 Master组件生成Pod配置文件。
    ls /etc/kubernetes/manifests/*.yaml
    kube-apiserver.yaml 
    kube-controller-manager.yaml
    kube-scheduler.yaml
    
05-生成etcd的Pod YAML文件。
    ls /etc/kubernetes/manifests/*.yaml
    kube-apiserver.yaml 
    kube-controller-manager.yaml
    kube-scheduler.yaml
	etcd.yaml
	
06-一旦这些 YAML 文件出现在被 kubelet 监视的/etc/kubernetes/manifests/目录下,kubelet就会自动创建这些yaml文件定义的pod,即master组件的容器。master容器启动后,kubeadm会通过检查localhost:6443/healthz这个master组件的健康状态检查URL,等待master组件完全运行起来

07-为集群生成一个bootstrap token

08-将ca.crt等 Master节点的重要信息,通过ConfigMap的方式保存在etcd中,工后续部署node节点使用

09-最后一步是安装默认插件,kubernetes默认kube-proxy和DNS两个插件是必须安装的 */

5) 记录init输出日志,并保存join信息

# 1、以下命令会在init输入日志中,可以复制自己的并执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 2、join信息如下(在woker节点执行)
kubeadm join 10.65.110.33:6443 --token stmaxc.wgvrl03db2ckuhh4 \
    --discovery-token-ca-cert-hash sha256:4bc9f2c7c609699c1815cb69e11dca0b3ec041198f1b6c7637608504228a0fe5
# 3、 验证是否成功
kubectl cluster-info
kubectl get pods -n kube-system
curl -k https://localhost:6443/healthz
# 4、corn-dns处于pending状态,需安装网络插件,以colico为例
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
# 5、查看各个pod状态为running,若存在其他状态,可借助以下命令排错
kubectl -n kube-system get pod calico-node-9h6mj -o yaml #查看某一个pod的yaml状态
kubectl get pods --all-namespaces -w   #查看所有命名空间的pods信息
kubectl -n kube-system log -f kube-scheduler-m   #查看pod日志信息
kubectl describe pod nginx-7sv2t  #默认命名空间下,查看pod详细信息

6)在worker节点执行

# 1、执行命令
kubeadm join 10.65.110.33:6443 --token stmaxc.wgvrl03db2ckuhh4 \
    --discovery-token-ca-cert-hash sha256:4bc9f2c7c609699c1815cb69e11dca0b3ec041198f1b6c7637608504228a0fe5
# 2、在master查看节点状态
kubectl get nodes 
# 如下、即完成k8s集群成功
NAME   STATUS   ROLES    AGE    VERSION
m      Ready    master   138m   v1.14.0
w      Ready    <none>   87m    v1.14.0

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐