本次安装一个master节点和两个node节点
k8s安装最低要求配置
master节点:2核2G
node1节点:2核4G
node2节点:2核4G
对内rpc通讯(gRPC) 对外restfulApi
1. 安装Docker【master 和node节点都安装】
Kubernetes默认CRI(容器运行时)为Docker,因此需要先安装Docker。这里使用指定版本安装
命令如下:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
配置阿里云镜像地址 打开这个文件/etc/docker/daemon.json
添加如下代码
{
"registry-mirrors": ["https://fewddcrg.mirror.aliyuncs.com"]
}
添加后重加载,重启
sudo systemctl daemon-reload
sudo systemctl restart docker
2 修改hostname
我们在安装之前给每个节点都修改hostname,这个名字会作为k8s的节点名。
- 修改命令
hostname node1
- 查看命令
hostname
如果这时候不修改后期修改nodename很麻烦,还可能导致coreDNS一直处于创建中的错误,如果遇到这种情况参考
修改镜像地址
3. 所有机器安装 kubernetes
使用阿里云镜像站的源,提供的安装方法,阿里云的镜像站网址:https://developer.aliyun.com/mirror/kubernetes
这里我们去掉启动命令systemctl start kubelet
,只设置开机启动,改变后的代码是:
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
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
4. 先初始化master节点的 kubeadm
复制一个初始化的yml
kubeadm config print init-defaults --kubeconfig all> kubeadm.yml
修改一下kubeadm.yml文件
第一个地方:advertiseAddress
配置master节点的内网ip
第二个地方:networking下添加pod网络网段
podSubnet: "10.224.0.0/16"
到此修改完成。
下面通过命令查看一下,包含了哪些镜像
kubeadm config images list --config kubeadm.yml
安装命令
kubeadm init --config kubeadm.yml --upload-certs | tee kubeadm-init.log
–upload-certs :将控制平面证书上载到kubeadm-certs Secret。
tee kubeadm-init.log : 记录日志到当前目录下的kubeadm-init.log文件中
执行命令成功之后给出了两个重要信息
- 第一个让我们执行如下命令拷贝文件
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 172.17.32.XX:6443 --token g5kkqm.za70x0cdl5w8pnv3 \
--discovery-token-ca-cert-hash sha256:a0c98a328eda69a0b01e08503c7c73febdxxxxxxxd9d944528fa809aea7fb853
5. 通过命令查看是否初始化成功
kubectl get node
这时候你会发现初始化是失败的,因我pod网络环境不通。
6. 【非必须】遇到问题,重置kubeadm
端口占用,忘记token,之前的设置错误等情况下,我们可能需要重置kubeadm,重置意味着“ kubeadm init”或“ kubeadm join”对此主机所做的更改将被还原
使用命令如下命令进行重置:
# 重置kubeadm
kubeadm reset
# 删除之前复制的文件
rm -rf $HOME/.kube
- 重置之后
- 如果是master节点按照步骤 3 重新初始化 kubeadm
- 如果是node节点,按照步骤7 重新添加节点
7. 添加node节点
- 在node节点执行,master节点初始化成功后的命令2,如果你没记住第二条命令,可以通过下面的方式重新生成token
kubeadm token create --print-join-command
- 执行成功之后记得把master节点
$HOME/.kube```目录的config文件添加到node节点`$HOME/.kube
中,这样node节点才能使用kubectl命令
可以通过命令在node节点下载
# 创建目录
mkdir $HOME/.kube
# nodeip 填写node节点的ip地址
scp root@masterip:/root/.kube/config /root/.kube/config
在node节点下执行如下命令,添加可执行权限
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果你添加node节点失败了,按照第6步重置node节点
8. 安装Pod网络CNI插件
没有安装网络插件的节点是NotReady状态,安装好网络插件之后节点才能变成Ready状态,网络插件的作用是让所有节点都接入到虚拟的局域网络中
CNI插件有四种可选Flannel,Calico,Canal,Weave,选择一种就可以
-
使用Flanner
需要两个文件
kube-fannel-rbac.yml
和kube-flannel.yml
,这两个文件可用的下载地址太难找,我放到github上一份github地址
下载后执行如下命令安装:kubectl apply -f kube-fannel-rbac.yml kubectl apply -f kube-flannel.yml
-
使用Calico
官网文档# 安装calico kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
安装后我们看一下node节点状态
kubectl get node
kubectl get pods -n kube-system
9. 测试
在Kubernetes集群中创建一个pod,验证是否正常运行,我们可以在master节点中执行命令,master节点会帮我们把所操作的任务调度到node节点执行。
# 创建 部署任务nginx 名字nginx ,80端口,1个node运行
kubectl run nginx --image=nginx --port=80 --replicas=1
# 创建service 让应用能被外部访问
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看启动情况
kubectl get pod,svc
# 查看启动情况--详细(能看出部署在了哪个节点上)
kubectl get pod,svc -o wide
能看出部署在了node1节点上,映射的端口是32725
我们可以访问一下看看是否能请求成功
http://node1ip:32725
http://node2ip:32725
# ----------------------------------------
# 查看所有的pod
kubectl get pods --all-namespaces
kubectl get pods,svc --all-namespaces
kubectl get pods,svc -o wide --all-namespaces
# 查看所有service
kubectl get service --all-namespaces
# 通过 -n指定namespaces
kubectl get service -n kube-system
# 查看(部署任务)的情况是否成功等
kubectl get deployment --all-namespaces
# 查看所有pod部署在哪里
kubectl get pod --all-namespaces -o wide
访问一下:
卸载docker(非必须)
# 查询安装列表
yum list installed | grep docker
# 卸载
yum remove docker-ce.x86_64 -y
# 删除镜像/容器等
rm -rf /var/lib/docker
常用命令
https://www.cnblogs.com/klvchen/archive/2018/09/04/9585746.html