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 <<EOF >  /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 <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
# 安装k8s相关软件
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
# pull镜像重新标记tag
images=(kube-proxy-amd64:v1.8.7 \
pause-amd64:3.0 \
kubernetes-dashboard-amd64:1.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

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,报错如下:
在这里插入图片描述如果日志不全 或者是想查看实时日志可以执行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        <none>        443/TCP        3d
nginx        NodePort    10.107.237.157   <none>        80:30601/TCP   11s

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

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

效果如下:

root@ubuntu:/home/cong# curl localhost:30601
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
 
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
 
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值