本篇,由于本公司装机所需的服务的集成ansible已经做的比较好了,所以显得相对安装极为简单,环境要求没有的,就需要大家自行搜索完成环境要求了。
安装环境准备及安装
安装k8s设备环境要求主要有下面10点:
- CentOS版本为7以上
- 2核CPU和2G内存以上
- 多台机器内网互通
- 每台机器的主机名、mac地址和product_uuid唯一
- 测试环境关闭防火墙,保证全部端口开放。
- 禁用SELinux
- 禁用交换分区
- docker服务
- root账号权限
- 配置国内的repo源
节点 | ip |
---|---|
k8s-master | 192.168.92.150 |
k8s-node1 | 192.168.92.151 |
1. 系统初始化-服务安装(所有集群主机)
ansible roles 直接跑# ansible-play kubernetes.yml
(包含3个roles,base、docker、kubernetes)
将会完成base系统初始优化,完成上述一系列的要求;
Docker 安装
kubelet、kubectl、kubeadm 的安装
请自行达到环境要求。
2.在master节点执行初始化
kubeadm init \
--apiserver-advertise-address 192.168.92.150 \ #master的ip地址(更改为自己对应的ip)
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.14.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
执行完后将会得到提示几行代码。
一部分是执行后,可以使用kubectl的命令 ;
一个便为其他主机加入Kubernetes集群的命令。
3.Node节点执行刚得到的命令可以加入k8s集群中
kubeadm join 192.168.92.150:6443 --token 2gaut1.gqk0kwfcopk63u1w \
--discovery-token-ca-cert-hash sha256:5e58307a6c891b170a79ea2243fbe912ae4f78871e1300d62110ce5f48425459
4.查看当前节点
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady <none> 98s v1.14.1
k8s-node1 NotReady master 41m v1.14.1 #状态为NotReady
当前查看集群状态,会发现节点状态均为notready,接下来我们就需要解决这个问题,安装flannel网络
5.安装flannel网络
#下载flannel的yml文件
Curl -O https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
#然后创建flannel:
kubectl create -f kube-flannel.yml
#完成后可以检查:(等待一段时间)
[root@k8s-master ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready <none> 98s v1.14.0
k8s-node1 Ready master 41m v1.14.0 #状态变为Ready
*至此,最简单的kuernetes便已经搭建好了,至于后续还需要做的什么高可用多master节点,其实用的也就是加入集群哪个命令,只是多加了一个参数。
n
感觉这编辑器回车换行没用,手动换行符了 =,=
n
n*
Kubernetes 多master节点加入
#使用命令
kubectl -n kube-system edit cm kubeadm-config
修改其中
controlPlaneEndpoint值为192.168.92.150:6443(当前master ip),然后确认信息修改完成
复制master节点上的相关证书到需要添加为master的k8s-master2节点上,证书清单如下:
/etc/kubernetes/pki/sa.key
/etc/kubernetes/pki/sa.pub
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/admin.conf
#查看当前token
kubeadm token list
#如果没有创建token
kubeadm token generate
生成:1l9w9s.hig0hylqzxjlzlda
#根据生成得到的创建加入集群命令
kubeadm token create 1l9w9s.hig0hylqzxjlzlda --print-join-command --ttl=24h
得到:
kubeadm join 192.168.92.150:6443 --token 1l9w9s.hig0hylqzxjlzlda --discovery-token-ca-cert-hash sha256:3136ec6e6534fc7129f3797690dee72ac6e576ffa4446e468c9e712f4fae6000
注意: 比添加work节点多了 --experimental-control-plane 参数
--experimental-control-plane :如果是作为master节点加入集群则需要在命令后加入此选项
常用操作,简单的命令行操作
Kubectl get namespace #创建如果不指定默认会放到default里
Kubectl get nodes
Kubectl get pods -o wide #-o wide 显示详细
Pod常见状态:
ContainerCreating #容器创建
ImagePullBackoff #从后端把镜像拉取到本地
Terminating #终止
Running
Kubectl get deployment
创建一个容器:
语法:
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]
--image :指定docker运行的容器镜像
--env : docker环境变量
--port : 映射端口
--replicas : 副本数
kubectl run nginx --image=docker.io/nginx --replicas=1 --port=900
#命令行将端口映射出去
kubectl expose deployment/nginx --type="NodePort" --port 80
#更改副本数量
kubectl scale deployments/nginx --replicas=3
升级到指定镜像:(滚动升级)
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.91
kubectl set image deployment/review-demo review-demo=library/review-demo:0.0.1 --namespace=scm(namespace可以不要)
回滚:
kubectl rollout undo deployment/topka-cn
回滚到指定版本
kubectl rollout undo deployment/review-demo --to-revision=2 --namespace=scm(namespace可以不要)
#总结创建过程
1、用户通过 kubectl 创建 Deployment。
2、Deployment 创建 ReplicaSet。
3、ReplicaSet 创建 Pod。
如果是大规模使用,还是需要使用yml文件使用,毕竟那样定义可以更为方便直观,使得后续更为高效使用。在这里我就不过多介绍了,deployment与service yml文件相关,可以继续看下我的另外博客,又通过调用kubernetes Api完成对yml文件提取,更新。