K8S安装和入门
以下分几部分来玩下K8S:
1、基础介绍
2、K8s安装
一、基础介绍
1、什么是K8s?
Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。
2、K8S的由来
Kubernetes 最初由 Google 的工程师开发和设计。Google 是最早研发 Linux 容器技术的企业之一(组建了cgroups),曾公开分享介绍 Google 如何将一切都运行于容器之中(这是 Google 云服务背后的技术)。Google 每周会启用超过 20 亿个容器——全都由内部平台 Borg 支撑。Borg 是 Kubernetes 的前身,多年来开发 Borg 的经验教训成了影响 Kubernetes 中许多技术的主要因素,后来捐赠给了 CNCF(云原生计算基金会,隶属 Linux 基金会)。
随着容器的火爆,利用容器架构来搭建业务系统的人越来越多。可是,大家在实操中发现,像 Docker 之类的容器引擎,折腾少量容器还行。但如今的云原生应用、机器学习任务或者大数据分析业务,动辄就要使用成百上千的容器。要管理这么多容器,Docker 们就力不从心了。经过几年大浪淘沙,K8S“击败”Swarm 和 Mesos,几乎成了当前容器编排的事实标准。

3、K8S的关键特性
自动化装箱:在不牺牲可用性的条件下,基于容器对资源的要求和约束自动部署容器。同时,为了提高利用率和节省更多资源,将关键和最佳工作量结合在一起。
自愈能力:当容器失败时,会对容器进行重启;当所部署的Node节点有问题时,会对容器进行重新部署和重新调度;当容器未通过监控检查时,会关闭此容器;直到容器正常运行时,才会对外提供服务。
水平扩容:通过简单的命令、用户界面或基于CPU的使用情况,能够对应用进行扩容和缩容。
服务发现和负载均衡:开发者不需要使用额外的服务发现机制,就能够基于Kubernetes进行服务发现和负载均衡。
自动发布和回滚:Kubernetes能够程序化的发布应用和相关的配置。如果发布有问题,Kubernetes将能够回归发生的变更。
保密和配置管理:在不需要重新构建镜像的情况下,可以部署和更新保密和应用配置。
存储编排:自动挂接存储系统,这些存储系统可以来自于本地、公共云提供商(例如:GCP和AWS)、网络存储(例如:NFS、iSCSI、Gluster、Ceph、Cinder和Floker等)。
4、K8S架构解析


二、K8S的安装
2.1、基础环境配置(所有主机上均操作):
1、配置主机名:
vim /etc/hosts
192.168.88.54 master
192.168.88.55 node1
192.168.88.56 node2
2、配置免登录,可参考SSH免密相关指引
3、安装相关的依赖包
配置yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
cd /etc/yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all
yum makecache
4、更新系统:yum update -y
5、关闭防火墙、selinux和swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
6、配置内核参数,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
7、配置国内Kubernetes源
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
8、配置 docker 源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.2、软件安装
注:在所有节点上进行如下操作
1.安装docker
yum install -y docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
Docker version 18.06.1-ce, build e68fc7a
docker服务为容器运行提供计算资源,是所有容器运行的基本平台。
2、安装kubeadm、kubelet、kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。
2.3、部署master 节点
注:在master节点上进行如下操作
1.在master进行Kubernetes集群初始化。
kubeadm init --kubernetes-version=1.16.3 \
--apiserver-advertise-address=192.168.88.54 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
定义POD的网段为: 10.244.0.0/16, api server地址就是master本机IP地址。
这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址,很多新手初次部署都卡在此环节无法进行后续配置。
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。如以下
kubeadm join 192.168.88.54:6443 --token o3w22y.5ntdqfa6tcz2hnqq \
--discovery-token-ca-cert-hash sha256:e5d54f9616c608a006982953d420faa2d0a60565c0630c49331f3288c9c47140
2.配置kubectl工具
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
查看状态
kubectl get nodes
kubectl get cs
3.部署flannel网络
sysctl net.bridge.bridge-nf-call-iptables=1
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改docker镜像地址
sed 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g' kube-flannel.yml
# 安装flannel
sudo kubectl apply -f kube-flannel.yml
2.4、部署node节点
注:在所有node节点上进行如下操作
执行如下命令,使所有node节点加入Kubernetes集群
kubeadm join 192.168.88.54:6443 --token o3w22y.5ntdqfa6tcz2hnqq \
--discovery-token-ca-cert-hash sha256:e5d54f9616c608a006982953d420faa2d0a60565c0630c49331f3288c9c47140
移除node节点(添加集群出错可尝试):
node上:kubeadm reset
master上:kubectl delete node node1
2.5、集群状态检测
注:在master节点上进行如下操作
# 只在 master 节点执行
kubectl get nodes -o wide
1.在master节点输入命令kubectl get nodes检查集群状态,返回如下结果则集群状态正常。
重点查看STATUS内容为Ready时,则说明集群状态正常
2.创建Pod以验证集群是否正常
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
删除Pod
$ kubectl delete -f ./pod.json # 使用 pod.json 中指定的类型和名称删除 pod
$ kubectl delete pod,service baz foo # 删除名称为 "baz" 和 "foo" 的 pod 和 service
$ kubectl delete pods,services -l name=myLabel # 删除带有标签 name=myLabel 的 pod 和 service
$ kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除带有标签 name=myLabel 的 pod 和 service,包括未初始化的对象
$ kubectl -n my-ns delete po,svc --all 删除命名空间 my-ns 下所有的 pod 和 service,包括未初始化的对象
进入pod执行命令
kubectl exec -it nginx-86c57db685-ks76q /bin/bash
2.6、重启的相关命令
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
systemctl restart kube-proxy
2.7、部署Dashboard
注:在master节点上进行如下操作
1.创建Dashboard的yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml
注:需要安装2.0版本的dashboard,1.0版不支持kubeadm1.16
使用如下命令或直接手动编辑kubernetes-dashboard.yaml文件
sed -i 's/k8s.gcr.io/loveone/g' recommended.yaml
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml
2.部署Dashboard
kubectl create -f kubernetes-dashboard.yaml
3.创建完成后,检查相关服务运行状态
kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
netstat -ntlp|grep 30001
4.在Firefox浏览器输入Dashboard访问地址:https://IP:30001
5.查看访问Dashboard的认证令牌
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
输出:
Name: dashboard-admin-token-tjhvn
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: 3706f67d-b553-4291-a25d-ea44f6e58a4a
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IktnaEJHZVVzQTloVW1Pb3Rub2xhQXZCVTB4WUhIemE1dFBuUm9DRE9zSlUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tdGpodm4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMzcwNmY2N2QtYjU1My00MjkxLWEyNWQtZWE0NGY2ZTU4YTRhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.mnhZ5WkDAQrLYgab_81O76Hs2G8NtSFIs3d3R_GKZJrRBHvf_1lsIukbCTrzxpQCY_dwWyJ9rWx1XffsoRxYSiFG25vpzq2g-u5TA2gZYsjcsoYdJyes8xbOu880DC3_Gp2VB5E0jQM8SNrWWm9YEwyFATs01mdPD5A5l24LDu1blmuePQdOHgj6sGUzVTc3R9JQMGZib2FY-HvbpurJ-2Q9mQWJsdt2q4FoKKnQpLdtxyEzQSQJqTEm9_uTKh1AWoAQj7UxRW2-4A8T5JGCxY1DuHqEx7vTiWdm-5wGUjb69zjd7Mdl7-vQeb53w--4ozIqMrRjWvsSBsJqlD2ANA
ca.crt: 1025 bytes
namespace: 11 bytes
6.使用输出的token登录Dashboard 认证通过后,登录Dashboard首页如图
登录界面很多错误提示,如是测试环境可以kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous

三、K8S的一些管理平台
基于kubernetes的容器云平台有很多,比如kubesphere、腾迅蓝鲸容器管理平台、Rancher,
还有一些公有云厂商的平台,如腾迅的TKE、阿里云的ACK,都是基于K8S打造的产品,使用起来更易上手,让我们更关注于业务,
当然如果是自建机房的话可以使用一些第三方的管理平台,kubesphere运行了有一年多的时间个人觉得值得推荐下
以下使用的是青云旗下的开源容器云平台产品kubesphere
找一台新的机器,或者基于前面已装好的K8S再安排kubesphere,这里以新装一台为例
安装及硬件配置方面可基于官网的教程:
https://kubesphere.com.cn/docs/quick-start/all-in-one-on-linux/
按指示安装完成后会提示对应的管理信息
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.88.54:30880
Account: admin
Password: P@88w0rd
NOTES:
1. After you log into the console, please check the
monitoring status of service components in
"Cluster Management". If any service is not
ready, please wait patiently until all components
are up and running.
2. Please change the default password after login.
#####################################################
https://kubesphere.io 2021-11-02 14:15:16
#####################################################
INFO[14:15:21 CST] Installation is complete.
Please check the result using the command:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
登录管理后台:

四、基于kubesphere平台K8S的使用
参考以下官方文档
- 在 Linux 上以 All-in-One 模式安装 KubeSphere
- 在 Kubernetes 上最小化安装 KubeSphere
- 创建企业空间、项目、帐户和角色
- 什么是 KubeSphere
- 启用可插拔组件
- 多节点安装
- KubeSphere 应用商店
- KubeSphere DevOps
- 多集群管理
- 镜像仓库
- 使用 Jenkinsfile 创建流水线
- 使用图形编辑面板创建流水线
- Source to Image:无需 Dockerfile 发布应用
- 应用程序生命周期管理