k8s服务集群搭建及简单应用部署

1.搭建说明
1):本地搭建我选用的是用vmware安装两套ubuntu系统进行模拟服务器(当然理论上节点可以无限的加),然后进行k8s集群的搭建,搭建完毕后部署一个nginx部署,其中踩坑无数,然后得到了一套比较完整的本地部署,希望对大家以后部署有一些帮助。
2.环境准备
1):vmware 虚拟机
2):ubuntu系统两套
kube-master: 192.168.6.131
kube-node: 192.168.6.132
3.搭建步骤
3.1 docker的安装
因为k8s是基于dokcer容器的集群,所以安应该在每台服务器上都安装docker。下面是执行脚本

#!/bin/bash
#SET UP THE REPOSITORY
apt-get remove docker docker-engine docker.io
apt-get update
apt-get install -y -q \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
#install docker
apt-get update && apt-get install docker-ce=18.06.0~ce~3-0~ubuntu

这一步基本顺利,坑不是很多。我在安装的时候是没有遇到问题的。
3.2 下载k8s组件:kubeadm, kubelet,kubectl(具体这些组件的作用是什么可以参考k8s的官方网址http://docs.kubernetes.org.cn/227.html#Kubernetes-4),这里由于要从谷歌下载(本着绿色上网的基本原则),所以只能从一个网址上下载这些jar包安装:https://github.com/zoux86/k8s/blob/master/k8s_ubuntu_deb.zip;解压和安装的脚本如下:

#!/bin/bash
apt-get install -y -q socat ebtables ethtool
dpkg -i kubernetes-cni_0.5.1-00_amd64.deb
dpkg -i kubelet_1.8.7-00_amd64.deb
dpkg -i kubectl_1.8.7-00_amd64.deb
dpkg -i kubeadm_1.8.7-00_amd64.deb
systemctl enable kubelet
systemctl start kubelet

3.3提前获取所需要的镜像
由于被墙的原因。这里是提前从dockerhub上下载所需要的镜像,然后tag为google镜像。执行下面的命令:

#!/bin/bash
ufw disable
swapoff -a
cat <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
images=(kube-scheduler-amd64:v1.8.7 \
kube-apiserver-amd64:v1.8.7 \
kube-proxy-amd64:v1.8.7 \
kube-controller-manager-amd64:v1.8.7
etcd-amd64:3.0.17 \
pause-amd64:3.0 \
k8s-dns-sidecar-amd64:1.14.5 \
k8s-dns-kube-dns-amd64:1.14.5 \
k8s-dns-dnsmasq-nanny-amd64:1.14.5 \
kubernetes-dashboard-amd64:v1.8.1)
for imageName in ${images[@]} ; do
  docker pull andylo25/$imageName
  docker tag andylo25/$imageName gcr.io/google_containers/$imageName
  docker rmi andylo25/$imageName
done

3.5 启动集群,master节点,启动的命令如下
kubeadm init --kubernetes-version=v1.8.7 --pod-network-cidr 10.244.0.0/16
初始化正常后会在最后的地方一个加入集群的提示命令:
如下:
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
上面的是 node加入master的token。
4.安装cni插件flannel
安装这个插件的目的就是为节点之间的通信。执行如下命令
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
但是执行过程中会遇到问题:
unable to recognize “https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml”: Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
这时候我们可以执行如下脚本

#!/bin/bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

就可以解决上面的报错了。
5.向集群中加入node节点 【所有work节点上】
5.1 确保所有节点都安装了docker
5.1 解压k8s_ubuntu_deb.zip,在同级目录下执行下面的脚本

#!/bin/bash
ufw disable
# 关闭swap,重启后会失效,可加入到启动脚本rc.local里
swapoff -a
cat >> /etc/sysctl.d/k8s.conf <

5.3 node加入master执行如下命令 执行时的命令是在主节点初始化过程中生成的,以下是我生成的,得输入你自己的。
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
5.4 在主节点上执行一下命令 可以查看加入的node节点 ,但是在查看前一定要确保 kubelet是启动成功的
kubectl get node
kubectl get pods -n kube-system
6.部署完后一些其他问题
当kubelet安装成功后,重新开机失败,输入命令kubectl get nodes后发现出现了错误
connection to the server x.x.x.x:6443 was refused - did you specify the right host or port?
输入systemctl status kubelet,报错如下:
k8s服务集群搭建及简单应用部署_第1张图片如果日志不全 或者是想查看实时日志可以执行journalctl -u kube-scheduler;最后发现是swap的问题
因为没有注释掉swap的自动挂载,机器重启后,swap还是会自动启用,从而导致kubelet无法启动。
执行如下命令解决问题
swap -a
修改/etc/fstab文件,将文件中的/dev/mapper/centos-swap swap swap defaults 0 0这一行注释掉就ok了。

7 nigx的简单部署
第一步:在master 节点上创建一个deployment

kubectl create deployment nginx --image=nginx

效果如下,可以看到一个叫nginx的deployment创建成功了。

root@ubuntu:/home/cong# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
 
root@ubuntu:/home/cong# kubectl get deployments
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     1         1         1            1           11m

第二步:创建一个service

kubectl create service nodeport nginx --tcp 80:80

效果如下,可以看到一个叫nginx的service创建成功了,这里kubectl get svc是kubectl get services的简写。

root@ubuntu:/home/cong# kubectl create service nodeport nginx --tcp 80:80
service/nginx created
 
root@ubuntu:/home/cong# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1                443/TCP        3d
nginx        NodePort    10.107.237.157           80:30601/TCP   11s

在slave节点上执行下面的命令验证一下nginx有没有部署成功。

curl localhost:30601
 
或者
 
curl kube-slave:30601

效果如下:

root@ubuntu:/home/cong# curl localhost:30601



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

用浏览器打开试试,nginx的首页显示出来了。

你可能感兴趣的:(k8s服务集群搭建及简单应用部署)