什么是k8s,k8s有什么功能?

介紹:k8s是一個(gè)docker集群的管理工具

2.1 k8s的核心功能

自愈: 重新啟動(dòng)失敗的容器溺欧,在節(jié)點(diǎn)不可用時(shí)鲤拿,替換和重新調(diào)度節(jié)點(diǎn)上的容器良姆,對(duì)用戶定義的健康檢查不響應(yīng)的容器會(huì)被中止型宝,并且在容器準(zhǔn)備好服務(wù)之前不會(huì)把其向客戶端廣播。
彈性伸縮: 通過(guò)監(jiān)控容器的cpu的負(fù)載值,如果這個(gè)平均高于80%,增加容器的數(shù)量,如果這個(gè)平均低于10%,減少容器的數(shù)量
服務(wù)的自動(dòng)發(fā)現(xiàn)和負(fù)載均衡: 不需要修改您的應(yīng)用程序來(lái)使用不熟悉的服務(wù)發(fā)現(xiàn)機(jī)制畜普,Kubernetes 為容器提供了自己的 IP 地址和一組容器的單個(gè) DNS 名稱唉韭,并可以在它們之間進(jìn)行負(fù)載均衡。
滾動(dòng)升級(jí)和一鍵回滾: Kubernetes 逐漸部署對(duì)應(yīng)用程序或其配置的更改挟裂,同時(shí)監(jiān)視應(yīng)用程序運(yùn)行狀況,以確保它不會(huì)同時(shí)終止所有實(shí)例背率。 如果出現(xiàn)問(wèn)題话瞧,Kubernetes會(huì)為您恢復(fù)更改,利用日益增長(zhǎng)的部署解決方案的生態(tài)系統(tǒng)寝姿。

2.2 k8s的歷史

2014年 docker容器編排工具交排,立項(xiàng)
2015年7月 發(fā)布kubernetes 1.0, 加入cncf
2016年,kubernetes干掉兩個(gè)對(duì)手饵筑,docker swarm埃篓,mesos 1.2版
2017年
2018年 k8s 從cncf基金會(huì) 畢業(yè)
2019年: 1.13, 1.14 ,1.15
cncf cloud native compute foundation
kubernetes (k8s): 希臘語(yǔ) 舵手根资,領(lǐng)航 容器編排領(lǐng)域架专,
谷歌16年容器使用經(jīng)驗(yàn),borg容器管理平臺(tái)玄帕,使用golang重構(gòu)borg部脚,kubernetes

2.3 k8s的安裝

yum安裝 1.5 最容易安裝成功,最適合學(xué)習(xí)的
源碼編譯安裝---難度最大 可以安裝最新版
二進(jìn)制安裝---步驟繁瑣 可以安裝最新版 shell,ansible,saltstack
kubeadm 安裝最容易, 網(wǎng)絡(luò) 可以安裝最新版
minikube 適合開發(fā)人員體驗(yàn)k8s, 網(wǎng)絡(luò)

2.4 k8s的應(yīng)用場(chǎng)景

k8s最適合跑微服務(wù)項(xiàng)目!

3:k8s常用的資源

3.1 創(chuàng)建pod資源

k8s yaml的主要組成
apiVersion: v1  api版本
kind: pod   資源類型
metadata:   屬性
spec:       詳細(xì)

k8s_pod.yaml
apiVersion: v1
kind: Pod
metadata:
 name: nginx
 labels:
 app: web
spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80

pod資源:至少由兩個(gè)容器組成,pod基礎(chǔ)容器和業(yè)務(wù)容器組成
pod配置文件2:
apiVersion: v1
kind: Pod
metadata:
 name: test
 labels:
 app: web
spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 - name: busybox
 image: 10.0.0.11:5000/busybox:latest
 command: ["sleep","10000"]

pod是k8s最小的資源單位

3.2 ReplicationController資源

rc:保證指定數(shù)量的pod始終存活,rc通過(guò)標(biāo)簽選擇器來(lái)關(guān)聯(lián)pod
k8s資源的常見(jiàn)操作:  
kubectl create -f xxx.yaml  
kubectl get pod|rc  
kubectl describe pod nginx  
kubectl delete pod nginx 
或者
kubectl delete -f xxx.yaml  
kubectl edit pod nginx

創(chuàng)建一個(gè)rc
apiVersion: v1
kind: ReplicationController
metadata:
 name: nginx
spec:
 replicas: 5
 selector:
 app: myweb
 template:
 metadata:
 labels:
 app: myweb
 spec:
 containers:
 - name: myweb
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80

rc的滾動(dòng)升級(jí)  新建一個(gè)nginx-rc1.15.yaml
升級(jí)  kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s
回滾  kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s

3.3 service資源

service幫助pod暴露端口
創(chuàng)建一個(gè)service
apiVersion: v1
kind: Service
metadata:
 name: myweb
spec:
 type: NodePort  #ClusterIP
 ports:
 - port: 80          #clusterIP
 nodePort: 30000   #nodeport
 targetPort: 80    #podport
 selector:
 app: myweb2

修改nodePort范圍
vim  /etc/kubernetes/apiserver
KUBE_API_ARGS="--service-node-port-range=3000-50000"</pre>
service默認(rèn)使用iptables來(lái)實(shí)現(xiàn)負(fù)載均衡, k8s 1.8新版本中推薦使用lvs(四層負(fù)載均衡)

3.4 deployment資源

有rc在滾動(dòng)升級(jí)之后,會(huì)造成服務(wù)訪問(wèn)中斷,于是k8s引入了deployment資源
創(chuàng)建deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 3
 template:
 metadata:
 labels:
 app: nginx
 spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 resources:
 limits:
 cpu: 100m
 requests:
 cpu: 100m
deployment升級(jí)和回滾
命令行創(chuàng)建deployment
kubectl run nginx --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record
命令行升級(jí)版本
kubectl set image deploy nginx nginx=10.0.0.11:5000/nginx:1.15
查看deployment所有歷史版本
kubectl rollout history deployment nginx
deployment回滾到上一個(gè)版本
kubectl rollout undo deployment nginx
deployment回滾到指定版本
kubectl rollout undo deployment nginx --to-revision=2

3.5 tomcat+mysql練習(xí)

在k8s中容器之間相互訪問(wèn),通過(guò)VIP地址!

4:k8s的附加組件

4.1 dns服務(wù)

安裝dns服務(wù)
1:下載dns_docker鏡像包
wget [http://192.168.12.201/docker_image/docker_k8s_dns.tar.gz](http://192.168.12.201/docker_image/docker_k8s_dns.tar.gz)
2:導(dǎo)入dns_docker鏡像包(node2節(jié)點(diǎn))
3:修改skydns-rc.yaml
spec:
 nodeSelector:
 kubernetes.io/hostname: 10.0.0.13
 containers:

4:創(chuàng)建dns服務(wù)

kubectl create -f skydns-rc.yaml

5:檢查

kubectl get all --namespace=kube-system

6:修改所有node節(jié)點(diǎn)kubelet的配置文件

vim /etc/kubernetes/kubelet

KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"

systemctl restart kubelet

4.2 namespace命令空間

namespace做資源隔離

4.3 健康檢查

4.3.1 探針的種類

livenessProbe:健康狀態(tài)檢查裤纹,周期性檢查服務(wù)是否存活委刘,檢查結(jié)果失敗,將重啟容器
readinessProbe:可用性檢查鹰椒,周期性檢查服務(wù)是否可用锡移,不可用將從service的endpoints中移除

4.3.2 探針的檢測(cè)方法

*   exec:執(zhí)行一段命令
*   httpGet:檢測(cè)某個(gè) http 請(qǐng)求的返回狀態(tài)碼
*   tcpSocket:測(cè)試某個(gè)端口是否能夠連接

4.3.3 liveness探針的exec使用

vi  nginx_pod_exec.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: exec
spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 args:
 - /bin/sh
 - -c
 - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
 livenessProbe:
 exec:
 command:
 - cat
 - /tmp/healthy
 initialDelaySeconds: 5
 periodSeconds: 5

4.3.4 liveness探針的httpGet使用

vi   nginx_pod_httpGet.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: httpget
spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 livenessProbe:
 httpGet:
 path: /index.html
 port: 80
 initialDelaySeconds: 3
 periodSeconds: 3

4.3.5 liveness探針的tcpSocket使用

vi   nginx_pod_tcpSocket.yaml
apiVersion: v1
kind: Pod
metadata:
 name: tcpSocket
spec:
 containers:
 - name: nginx
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 livenessProbe:
 tcpSocket:
 port: 80
 initialDelaySeconds: 3
 periodSeconds: 3

4.3.6 readiness探針的httpGet使用

vi   nginx-rc-httpGet.yaml
apiVersion: v1
kind: ReplicationController
metadata:
 name: readiness
spec:
 replicas: 2
 selector:
 app: readiness
 template:
 metadata:
 labels:
 app: readiness
 spec:
 containers:
 - name: readiness
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 readinessProbe:
 httpGet:
 path: /qiangge.html
 port: 80
 initialDelaySeconds: 3
 periodSeconds: 3

4.4 dashboard服務(wù)

1:上傳并導(dǎo)入鏡像,打標(biāo)簽
2:創(chuàng)建dashborad的deployment和service
3:訪問(wèn)[http://10.0.0.11:8080/ui/](http://10.0.0.11:8080/ui/)

4.5 通過(guò)apiservicer反向代理訪問(wèn)service

第一種:NodePort類型 
type: NodePort
 ports:
 - port: 80
 targetPort: 80
 nodePort: 30008
?
第二種:ClusterIP類型
 type: ClusterIP
 ports:
 - port: 80
 targetPort: 80</pre>

5: k8s彈性伸縮

k8s彈性伸縮,需要附加插件heapster監(jiān)控

5.1 安裝heapster監(jiān)控

1:上傳并導(dǎo)入鏡像,打標(biāo)簽

ls *.tar.gz  for n in `ls *.tar.gz`;do docker load -i $n ;done  docker tag docker.io/kubernetes/heapster_grafana:v2.6.0 10.0.0.11:5000/heapster_grafana:v2.6.0  docker tag docker.io/kubernetes/heapster_influxdb:v0.5 10.0.0.11:5000/heapster_influxdb:v0.5  docker tag docker.io/kubernetes/heapster:canary 10.0.0.11:5000/heapster:canary

2:上傳配置文件,kubectl create -f .

3:打開dashboard驗(yàn)證

5.2 彈性伸縮

1:修改rc的配置文件
containers:
 - name: myweb
 image: 10.0.0.11:5000/nginx:1.13
 ports:
 - containerPort: 80
 resources:
 limits:
 cpu: 100m
 requests:
 cpu: 100m
2:創(chuàng)建彈性伸縮規(guī)則
kubectl autoscale -n qiangge replicationcontroller myweb --max=8 --min=1 --cpu-percent=8
3:測(cè)試
ab -n 1000000 -c 40 [http://172.16.28.6/index.html](http://172.16.28.6/index.html)
ab -n 300000 -c 100 [http://172.16.23.14/index.html](http://172.16.23.14/index.html)

擴(kuò)容截圖

image.png
image.png

縮容:

image.png
image.png
image.png

6:持久化存儲(chǔ)

pv: persistent volume 全局的資源 pv,node
pvc: persistent volume claim 局部的資源(namespace)pod漆际,rc淆珊,svc

6.1:安裝nfs服務(wù)端(10.0.0.11)

yum install nfs-utils.x86_64 -y (所有節(jié)點(diǎn))
mkdir /data 
vim /etc/exports 
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash) 
systemctl start rpcbind 
systemctl start nfs

6.2:在node節(jié)點(diǎn)安裝nfs客戶端

yum install nfs-utils.x86_64 -y 
showmount -e 10.0.0.11

6.3:創(chuàng)建pv和pvc

上傳yaml配置文件,創(chuàng)建pv和pvc

6.4:創(chuàng)建mysql-rc,pod模板里使用volume

volumeMounts: 
- name: mysql 
  mountPath: /var/lib/mysql 
volumes: 
- name: mysql 
  persistentVolumeClaim: 
      claimName: tomcat-mysql

6.5: 驗(yàn)證持久化

驗(yàn)證方法1:刪除mysql的pod,數(shù)據(jù)庫(kù)不丟
kubectl delete pod mysql-gt054
驗(yàn)證方法2:查看nfs服務(wù)端,是否有mysql的數(shù)據(jù)文件
image.png

6.6: 分布式存儲(chǔ)glusterfs

image.png
  • a: 什么是glusterfs
Glusterfs是一個(gè)開源分布式文件系統(tǒng),具有強(qiáng)大的橫向擴(kuò)展能力奸汇,可支持?jǐn)?shù)PB存儲(chǔ)容量和數(shù)千客戶端施符,通過(guò)網(wǎng)絡(luò)互
聯(lián)成一個(gè)并行的網(wǎng)絡(luò)文件系統(tǒng)。具有可擴(kuò)展性擂找、高性能戳吝、高可用性等特點(diǎn)。
  • b: 安裝glusterf
所有節(jié)點(diǎn): 
yum install centos-release-gluster -y 
yum install glusterfs-server -y 
systemctl start glusterd.service 
systemctl enable glusterd.service 
mkdir -p /gfs/test1 
mkdir -p /gfs/test2
  • c: 添加存儲(chǔ)資源池
master節(jié)點(diǎn): 
gluster pool list 
gluster peer probe k8s-node1 
gluster peer probe k8s-node2 
gluster pool list
  • d: glusterfs卷管理
創(chuàng)建分布式復(fù)制卷 
gluster volume create qiangge replica 2 k8s-master:/gfs/test1 k8s-master:/gfs/test2 k8s- node1:/gfs/test1 k8s-node1:/gfs/test2 force 
啟動(dòng)卷 
gluster volume start qiangge 
查看卷 
gluster volume info qiangge 
掛載卷 
[root@glusterfs01 ~]# mount -t glusterfs 10.0.0.14:/qiangge /mnt
[root@glusterfs01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda2            48G  1.8G   47G   4% /
/dev/sdb             10G   33M   10G   1% /gfs/test1
/dev/sdc             10G   33M   10G   1% /gfs/test2
10.0.0.14:/qiangge   30G  404M   30G   2% /mnt
  • e: 分布式復(fù)制卷講解
image.png
  • f: 分布式復(fù)制卷擴(kuò)容
擴(kuò)容前查看容量: 
df -h 
擴(kuò)容命令: 
gluster volume add-brick qiangge k8s-node2:/gfs/test1 k8s-node2:/gfs/test2 force 
擴(kuò)容后查看容量: 
[root@glusterfs01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda2            48G  1.8G   47G   4% /
/dev/sdb             10G   33M   10G   1% /gfs/test1
/dev/sdc             10G   33M   10G   1% /gfs/test2
10.0.0.14:/qiangge   30G  404M   30G   2% /mnt

6.7 k8s 對(duì)接glusterfs存儲(chǔ)

  • a:創(chuàng)建endpoint
vi  glusterfs-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs
  namespace: default
subsets:
- addresses:
  - ip: 10.0.0.11
  - ip: 10.0.0.12
  - ip: 10.0.0.13
  ports:
  - port: 49152
    protocol: TCP
  • b: 創(chuàng)建service
vi  glusterfs-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: glusterfs
  namespace: default
spec:
  ports:
  - port: 49152
    protocol: TCP
    targetPort: 49152
  sessionAffinity: None
  type: ClusterIP
  • c: 創(chuàng)建gluster類型pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster
  labels:
    type: glusterfs
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs"
    path: "qiangge"
    readOnly: false
  • d: 創(chuàng)建pvc
vim gluster_pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: gluster
spec:
  selector:
    matchLabels:
      type: glusterfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  • e:在pod中使用gluster
vi  nginx_pod.yaml
…… 
volumeMounts:
        - name: nfs-vol2
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-vol2
        persistentVolumeClaim:
          claimName: gluster

7:與jenkins集成實(shí)現(xiàn)ci/cd

ip地址 服務(wù) 內(nèi)存
10.0.0.11 kube-apiserver 8080 1G
10.0.0.14 jenkins(tomcat + jdk) 8080 1G
10.0.0.15 gitlab 8080,80 2G

7.1: 安裝gitlab并上傳代碼

#a:安裝
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm
yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y
#b:配置
vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.15'
prometheus_monitoring['enable'] = false
#c:應(yīng)用并啟動(dòng)服務(wù)
gitlab-ctl reconfigure

#使用瀏覽器訪問(wèn)http://10.0.0.15,修改root用戶密碼,創(chuàng)建project
#上傳代碼到git倉(cāng)庫(kù)
cd /srv/
rz -E
unzip xiaoniaofeifei.zip 
rm -fr xiaoniaofeifei.zip 

git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git init
git remote add origin http://10.0.0.15/root/xiaoniao.git
git add .
git commit -m "Initial commit"
git push -u origin master
mv xiaoniaofeifei.zip /srv/

1.Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"

2.Create a new repository
git clone http://10.0.0.15/root/xiaoniao.git
cd xiaoniao
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

3.Existing folder
cd existing_folder
git init
git remote add origin http://10.0.0.15/root/xiaoniao.git
git add .
git commit -m "Initial commit"
git push -u origin master

4.Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin http://10.0.0.15/root/xiaoniao.git
git push -u origin --all
git push -u origin --tags

7.2 安裝jenkins,并自動(dòng)構(gòu)建docker鏡像

1:安裝jenkins

cd /opt/
rz -E
rpm -ivh jdk-8u102-linux-x64.rpm 
mkdir /app
tar xf apache-tomcat-8.0.27.tar.gz -C /app
rm -fr /app/apache-tomcat-8.0.27/webapps/*
cp jenkins.war /app/apache-tomcat-8.0.27/webapps/ROOT.war
tar xf jenkin-data.tar.gz -C /root
/app/apache-tomcat-8.0.27/bin/startup.sh 
netstat -lntup

2:訪問(wèn)jenkins

訪問(wèn)[http://10.0.0.14:8080/,](http://10.0.0.14:8080/,)默認(rèn)賬號(hào)密碼admin:123456

3:配置jenkins拉取gitlab代碼憑據(jù)
a:在jenkins上生成秘鑰對(duì)

ssh-keygen -t rsa

b:復(fù)制公鑰粘貼gitlab上

image.png

c:jenkins上創(chuàng)建全局憑據(jù)

image.png

4:拉取代碼測(cè)試

image.png

5:編寫dockerfile并測(cè)試

vim dockerfile
FROM 10.0.0.11:5000/nginx:1.13
add .  /usr/share/nginx/html
#添加docker build構(gòu)建時(shí)不add的文件
vim  .dockerignore
dockerfile

docker build -t xiaoniao:v1 .
docker run -d -p 88:80 xiaoniao:v1

打開瀏覽器測(cè)試訪問(wèn)xiaoniaofeifei的項(xiàng)目

image.png

6:上傳dockerfile和.dockerignore到私有倉(cāng)庫(kù)

git add docker  .dockerignore
git commit -m "fisrt commit"
git push -u origin master
image.png

7:點(diǎn)擊jenkins立即構(gòu)建,自動(dòng)構(gòu)建docker鏡像并上傳到私有倉(cāng)庫(kù)
修改jenkins 工程配置

image.png
docker  build  -t  10.0.0.11:5000/test:v$BUILD_ID  .
docker  push 10.0.0.11:5000/test:v$BUILD_ID

7.3 jenkins自動(dòng)部署應(yīng)用到k8s

kubectl -s 10.0.0.11:8080  get nodes

shell
if [ -f /tmp/xiaoniao.lock ];then
    docker  build  -t  10.0.0.11:5000/xiaoniao:v$BUILD_ID  .
    docker  push 10.0.0.11:5000/xiaoniao:v$BUILD_ID
    kubectl -s 10.0.0.11:8080 set image  -n xiaoniao deploy xiaoniao xiaoniao=10.0.0.11:5000/xiaoniao:v$BUILD_ID
    echo "更新成功"
else
    docker  build  -t  10.0.0.11:5000/xiaoniao:v$BUILD_ID  .
    docker  push 10.0.0.11:5000/xiaoniao:v$BUILD_ID
    kubectl  -s 10.0.0.11:8080  create  namespace  xiaoniao
    kubectl  -s 10.0.0.11:8080  run   xiaoniao  -n xiaoniao  --image=10.0.0.11:5000/xiaoniao:v$BUILD_ID --replicas=3 --record
    kubectl  -s 10.0.0.11:8080   expose -n xiaoniao deployment xiaoniao --port=80 --type=NodePort
    port=`kubectl -s 10.0.0.11:8080  get svc -n xiaoniao|grep -oP '(?<=80:)\d+'`
    echo "你的項(xiàng)目地址訪問(wèn)是http://10.0.0.13:$port"
    touch /tmp/xiaoniao.lock
fi
image.png

jenkins一鍵回滾

kubectl  -s 10.0.0.11:8080 rollout undo -n xiaoniao  deployment xiaoniao
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婴洼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撼嗓,更是在濱河造成了極大的恐慌柬采,老刑警劉巖欢唾,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粉捻,居然都是意外死亡礁遣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門肩刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祟霍,“玉大人,你說(shuō)我怎么就攤上這事盈包》心牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵呢燥,是天一觀的道長(zhǎng)崭添。 經(jīng)常有香客問(wèn)我,道長(zhǎng)叛氨,這世上最難降的妖魔是什么呼渣? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寞埠,結(jié)果婚禮上屁置,老公的妹妹穿的比我還像新娘。我一直安慰自己仁连,他們只是感情好蓝角,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怖糊,像睡著了一般帅容。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伍伤,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天并徘,我揣著相機(jī)與錄音,去河邊找鬼扰魂。 笑死麦乞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的劝评。 我是一名探鬼主播姐直,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蒋畜!你這毒婦竟也來(lái)了声畏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎插龄,沒(méi)想到半個(gè)月后愿棋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡均牢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年糠雨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徘跪。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甘邀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垮庐,到底是詐尸還是另有隱情松邪,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布突硝,位于F島的核電站测摔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏解恰。R本人自食惡果不足惜锋八,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望护盈。 院中可真熱鬧挟纱,春花似錦、人聲如沸腐宋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胸竞。三九已至欺嗤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卫枝,已是汗流浹背煎饼。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留校赤,地道東北人吆玖。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像马篮,于是被迫代替她去往敵國(guó)和親沾乘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容