kubernete从安装到搭建负载均衡集群

来源:https://lcylichenyi.github.io/kubernete/

0.搭建环境

镜像:ubuntu-18.04.3-live-server-amd64

身份:root(重要)

(有使用http代理和不代理两种选项,都可以走通,已测试)

1.设置http代理【如不使用代理可跳过这一步】:

1.1 curl代理配置

vi ~/.curlrc
# 加一行 proxy=http://xxx.xxx.xxx.xxx:xx
# 然后curl 谷歌看是否正常

1.2 docker代理配置

mkdir /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf
## 复制下面内容

[Service]
Environment="HTTP_PROXY=http://xxx.xxx.xxx.xxx:xx" "HTTPS_PROXY=http://xxx.xxx.xxx.xxx:xx"

##
systemctl daemon-reload && systemctl restart docker

2.设置apt代理【如使用阿里云服务器可跳过这一步】

使用阿里云的镜像:

(https://developer.aliyun.com/mirror)[https://developer.aliyun.com/mirror]

使用以下代码替换/etc/apt/sources.list的内容,替换前先备份(mv sources.list sources.list.bak)

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

然后重启

3.安装docker

官网下载教程:

https://docs.docker.com/install/linux/docker-ce/ubuntu/

(以下代码保存为shell直接运行更快)

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 成功后看是否成功
docker --version
# 然后设置开机自动启动docker
sudo systemctl enable docker

4 禁用swap

对于禁用swap内存,具体原因可以查看Github上的Issue:Kubelet/Kubernetes should work with Swap Enabled

https://github.com/kubernetes/kubernetes/issues/53533

若想永久关闭:

  • sudo vim /etc/fstab

    注释掉swap那一行

  • 重启

5.安装kubelet & kubeadm & kubectl

kubelet:运行在cluster所有节点上,负责启动POD和容器
kubeadm:用于初始化cluster
kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件(node节点其实可以不用安装)

5.1 使用代理

方案一(官方,配置过代理推荐使用这个)

来源:

https://kubernetes.io/docs/tasks/tools/install-kubectl

(以下代码保存为shell直接运行更快)

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl kubeadm kubelet
apt-mark hold kubelet kubeadm kubectl

查看状态

systemctl status kubelet

开机自启动

systemctl enable kubelet

5.2 不使用代理

方案二(如果没有使用代理):

来源:

https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.53322f70H0yumO

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
# 生成/etc/apt/sources.list.d/kubernetes.list文件加上一行即可
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

查看状态

systemctl status kubelet

开机自启动

systemctl enable kubelet

6 获取kubeadm启动需要的镜像

方法一(使用了代理):

如能翻墙则直接kubeadm config images pull

方法二(没有使用代理):

运行

kubeadm config images list

获取当前版本kubeadm启动需要的镜像,像这样

k8s.gcr.io/kube-apiserver:v1.17.0
k8s.gcr.io/kube-controller-manager:v1.17.0
k8s.gcr.io/kube-scheduler:v1.17.0
k8s.gcr.io/kube-proxy:v1.17.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

然后把前缀k8s.gcr.io/ 去掉 写个像下面这样的shell脚本运行一下,用阿里云的镜像替代谷歌的镜像。

#!/bin/bash
images=(
kube-apiserver:v1.17.0
kube-controller-manager:v1.17.0
kube-scheduler:v1.17.0
kube-proxy:v1.17.0
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for i in ${images[@]};
do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$i
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$i k8s.gcr.io/$i
done

7 修改docker的cgroup驱动程序

只能使用“systemd" 不然会报错

vi /etc/docker/daemon.json

加一条

"exec-opts":["native.cgroupdriver=systemd"]

随后

systemctl restart docker

8 直接克隆机器形成几个节点(省事)

此时可以直接克隆一下形成几个节点,因为此时的状态可以直接当作节点使用。

如果是虚拟机中布置 在当前状态直接克隆形成几个节点改一下hostname和ip地址即可,可以省很多事。

如果是虚拟机的话 克隆之后修改一下节点的ip(在ip许可范围内的都行,最简单的就在原来的ip上加1)

因为我这里是ens33 这里也可能是eth0

# 修改ip地址
sudo ifconfig ens33 <新的ip地址>
sudo systemctl restart network-manager

# 修改主机名(改成啥样随意)
vi /etc/hostname

# 重启
reboot

9 启动(只在master节点)

ip地址用ip addr看本机的ip地址

kubernetes-version 就是前面kubeadm config images 看到的版本号,我这里是v1.17.0

sudo kubeadm init --kubernetes-version=v1.17.0 --apiserver-advertise-address=<本机的ip地址>

如图:init成功 ,以下图仔细看,token和ip地址要记住(如果忘了也没事)

# 可以查看其他node join master时需要的token
kubeadm token create --print-join-command

在这里插入图片描述

验证是否启动成功:

curl https://127.0.0.1:6443 -k

正常结果:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {

  },
  "code": 403
}

随后

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

10 加入(node节点)

# 在master上查看需要在node上运行的命令
kubeadm token create --print-join-command

# 在node上运行类似这种(不要复制黏贴 用上面查看获得的)
kubeadm join 192.168.190.77:6443 --token zvj7eq.l5eenxi8ofhk3kxd \
    --discovery-token-ca-cert-hash sha256:49ceaed93cd973f6cd276cb036bd95333f4a70d7a6a588580b399fa3108002c4

11 检验(在master节点上)

kubectl get nodes

这时可以看到3个NotReady的节点。 这是因为还没安装网络插件。

在这里插入图片描述

12 安装网络插件

来源:

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

选择weave net

sysctl net.bridge.bridge-nf-call-iptables=1
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

然后等待

kubectl get pods --all-namespaces

全是running即可

注:不加–all-namespaces则默认指明namespace=default 所以看不到

13 修改nodeport端口范围

vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 增加一行--service-node-port-range=1-65535
# (修改完自动会更新,不需要其他操作)

默认值为30000-32767,如果不修改的话使用ingress时对外暴露的接口80与443会随机使用另外两个范围内的值。

14 安装ingress control

来源:

https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/installation.md

kubectl apply -f common/ns-and-sa.yaml
kubectl apply -f common/default-server-secret.yaml
kubectl apply -f common/nginx-config.yaml
kubectl apply -f common/custom-resource-definitions.yaml
kubectl apply -f rbac/rbac.yaml
kubectl apply -f daemon-set/nginx-ingress.yaml

# 然后在nodeport.yaml文件中增加两个nodePort字段强制指向主机的80和443端口,而不是使用随机分配的端口
apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
spec:
  type: NodePort 
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
    nodePort: 80 #新增
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
    nodePort: 443 #新增
  selector:
    app: nginx-ingress
kubectl apply -f service/nodeport.yaml

dePort字段强制指向主机的80和443端口,而不是使用随机分配的端口


```yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
spec:
  type: NodePort 
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
    nodePort: 80 #新增
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
    nodePort: 443 #新增
  selector:
    app: nginx-ingress
kubectl apply -f service/nodeport.yaml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值