100元实践k8s搭建过程

前语

作业中越来越重度运用k8s,想进一步了解k8s的作业原理。一方面学习业界优秀系统设计思路,另一方面多了解也能够进步日常作业效率,比方和k8s开发的沟通效率等。今日第一步:自己着手搭建一个k8s服务。

本文选用的版别
kubectl kubelet kubeadm版别: 1.23.1
操作系统版别: CentOS 8.2 64位

准备作业

1.采购云主机

官方主张最低云主机装备2核4G,国内恣意云厂商采购就行,作为K8S服务的宿主机。教程操作系统为CentOS 8.2 64位

备注:官方文档标记最低装备内存要求2G,可是装置完dashboard、ingress等服务之后比较卡顿,所以为了流畅这儿推荐4G内存。

100元实践k8s搭建过程

2.铺开端口

外网铺开30000端口,后续浏览器登陆k8s dashboard看板运用。并检查ssh服务端口22是否正常开启。

100元实践k8s搭建过程

运用ssh登陆云主机,开端装备。

3.装置工具

装置常用工具:

yum install -y yum-utils device-mapper-persistent-data lvm2 iproute-tc

4.增加阿里源

国内存在墙的问题,增加阿里源加快:

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

开端装置

1.装置社区版别docker

装置:

yum -y install docker-ce

enable:

systemctl enable docker

检查docker版别docker version

100元实践k8s搭建过程

2.装置 kubectl kubelet kubeadm

2.1增加阿里源

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

留意点:v1.24版别后kubernetes抛弃docker,装置进程存在一些问题,这儿咱们指定1.23.1版别装置

2.2装置 1.23.1版别 kubectl kubelet kubeadm:

yum install -y kubectl-1.23.1 kubelet-1.23.1 kubeadm-1.23.1

发动kubelet:

systemctl enable kubelet

检查kubectl版别:

100元实践k8s搭建过程

2.3修改cgroupdriver

履行如下指令:

cat <<EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

重启服务:

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

2.4替换镜像源

由于这儿咱们运用的是国内的云厂商,拜访海外k8s.gcr.io拉取镜像存在墙的问题,所以下面咱们就替换成registry.cn-hangzhou.aliyuncs.com/google_containers的地址,具体操作如下:

删除旧装备文件:

rm -f /etc/containerd/config.toml

出产默许装备文件:

containerd config default > /etc/containerd/config.toml

替换镜像地址:

sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/' /etc/containerd/config.toml

重启containerd

systemctl restart containerd

2.4初始化k8s master节点

初始化指令:

kubeadm init --kubernetes-version=1.23.1  \
--apiserver-advertise-address=<你的云主机内网IP>   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

通常会卡在这一步,假如大家依照本文的版别,理论不会报错,假如报错需求逐个搜索解决了。

100元实践k8s搭建过程

假如初始化失败,履行如下指令后再重新初始化:

kubeadm reset -f

初始化成功之后得到如下指令,加入新的node节点运用(本次不运用):

kubeadm join <你的云主机内网IP>:6443 --token 78376v.rznvls130w3sgwb7 \
	--discovery-token-ca-cert-hash sha256:add03fb7de52ad73fd96626fa9d9f0d639186524ba34d24742c15fce8093b8c5

装备kubectl

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

检查k8s服务发动状况:

kubectl get pod --all-namespaces

100元实践k8s搭建过程

3.装置calico网络

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml

装置完毕后,检查calico服务发动状况:

kubectl get pod --all-namespaces

100元实践k8s搭建过程

4.装置kubernates-dashboard

4.1 下载装备文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml

4.2 增加nodeport

装备nodeport,外网拜访dashboard:

100元实践k8s搭建过程

4.3 创立dashboard服务

创立:

kubectl apply -f recommended.yaml

检查kubernetes-dashboard发动状况:

kubectl get pod -n kubernetes-dashboard

100元实践k8s搭建过程

4.4 外网拜访dashboard

浏览器翻开dashboard,地址:<你的外网IP:30000>

100元实践k8s搭建过程

如上图所示,因为https的问题,浏览器会提示「您的连接不是私密连接」。推荐运用chrome浏览器,并在当前页面上恣意位置点击,然后键盘输入「thisisunsafe」再点击回车健即可。

100元实践k8s搭建过程

4.5 获取token

创立用户。dashboard-adminuser.yaml装备文件示例,履行如下指令直接创立,参考官方教程创立示例用户 https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

创立装备文件:

cat <<EOF > dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

创立用户:

kubectl apply -f dashboard-adminuser.yaml

创立成功之后提示:

serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

履行如下指令获取token:

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

100元实践k8s搭建过程

4.6 复制token登陆dashboard

100元实践k8s搭建过程

到这儿咱们现已能够正常创立pod了,可是外网还不能直接拜访到pod,尽管能够选用dashboard的nodeport的方案,可是nodeport只支持露出30000-32767的端口,不适用于出产环境,接着咱们就通过另一种方式ingress来对外露出pod。

5. 装置ingress

5.1 下载官方装备文件,这儿运用的v1.3.1版别:

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml

5.2 相同由于墙的问题,咱们把装备文件中的镜像源换成阿里源:

替换nginx-ingress-controller镜像源:

sed -i 's/registry.k8s.io\/ingress-nginx\/controller:v1.3.1@sha256:54f7fe2c6c5a9db9a0ebf1131797109bb7a4d91f56b9b362bde2abd237dd1974/registry.cn-hangzhou.aliyuncs.com\/google_containers\/nginx-ingress-controller:v1.3.1/g' ./deploy.yaml

替换kube-webhook-certgen镜像源:

sed -i 's/registry.k8s.io\/ingress-nginx\/kube-webhook-certgen:v1.3.0@sha256:549e71a6ca248c5abd51cdb73dbc3083df62cf92ed5e6147c780e30f7e007a47/registry.cn-hangzhou.aliyuncs.com\/google_containers\/kube-webhook-certgen:v1.3.0/g' ./deploy.yaml

5.3 创立ingress服务

创立:

kubectl apply -f deploy.yaml

检查状况:

kubectl get pod --all-namespaces

100元实践k8s搭建过程

创立完结之后,检查ingress状况,为pending状况,原因是短少LB,这儿咱们运用metallb

5.4 装置metallb

履行装置指令:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml

100元实践k8s搭建过程

创立secret:

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

检查装置状况:

kubectl get ns
kubectl get all -n metallb-system

5.4 绑定外网IP EXTERNAL-IP

kubectl get service ingress-nginx-controller --namespace=ingress-nginx

100元实践k8s搭建过程

kubectl edit service ingress-nginx-controller --namespace=ingress-nginx
增加:
externalIPs:
  - 118.195.228.232

100元实践k8s搭建过程

kubectl get service ingress-nginx-controller --namespace=ingress-nginx

100元实践k8s搭建过程

检查发动状况kubectl get pod --all-namespaces

100元实践k8s搭建过程

metalab和ingress-nginx的状况仍是pending,检查原因:

kubectl describe pod ingress-nginx-controller-6bfbdbdd64-jp7lw -n ingress-nginx

100元实践k8s搭建过程

原因是现在只有master节点,还没有node节点,未了节约本钱,这儿咱们允许master参与调度,把master节点也当node运用。

5.5 允许master节点能够被调度

履行:

kubectl taint nodes --all node-role.kubernetes.io/master-

检查pod状况:

kubectl get pod --all-namespaces

100元实践k8s搭建过程

pod均正常运行。到这儿,一个根底的k8s服务根本装置完结。

体验k8s

解析域名

你的测验域名A解析到服务器的外网IP上,具体步骤略。

创立测验服务pod

kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo

创立ingress映射

kubectl create ingress demo --class=nginx  --rule="k8s.tigerb.cn/*=demo:80"

测验

检查ingress服务service的外网端口

100元实践k8s搭建过程

demopod发动成功后拜访http://k8s.tigerb.cn:32374/测验服务即可。

100元实践k8s搭建过程

到此为止,咱们就成功布置了一个k8s服务,运用dashborad就能够很轻松完结服务布置、扩容、缩容等。

100元实践k8s搭建过程